{"id":2699,"date":"2024-10-17T10:00:53","date_gmt":"2024-10-17T01:00:53","guid":{"rendered":"https:\/\/comcent.co.jp\/blog\/?p=2699"},"modified":"2024-09-24T15:02:14","modified_gmt":"2024-09-24T06:02:14","slug":"vb-net%e3%81%a7pdf%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%82%92acrobat%e3%82%92%e4%bd%bf%e7%94%a8%e3%81%97%e3%81%a6%e9%9d%9e%e5%90%8c%e6%9c%9f%e5%8d%b0%e5%88%b7%e3%81%99%e3%82%8b","status":"publish","type":"post","link":"https:\/\/comcent.co.jp\/blog\/archives\/2699\/","title":{"rendered":"VB.NET\u3067PDF\u30d5\u30a1\u30a4\u30eb\u3092Acrobat\u3092\u4f7f\u7528\u3057\u3066\u975e\u540c\u671f\u5370\u5237\u3059\u308b"},"content":{"rendered":"\n<p>\u4f5c\u6210\u65e5\uff1a2023\/05\/31<br>\u6700\u7d42\u66f4\u65b0\u65e5\uff1a2023\/05\/31<\/p>\n\n\n\n<h4 class=\"wp-block-comcent-blog-headline01 modHeadline\">\u74b0\u5883<\/h4>\n\n\n\n<p>\u30a8\u30c7\u30a3\u30bf\u30fc\uff1aVisual Studio Community 2022 17.4.4<br>\u30bf\u30fc\u30b2\u30c3\u30c8\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\uff1a.NET Framework 4.7.2<br>Adobe Acrobat Pro\uff1a2023.001.20174<br>(\u691c\u8a3c\u306f\u3067\u304d\u3066\u3044\u307e\u305b\u3093\u304c\u3001Pro\u3067\u306f\u306a\u304f\u3066\u3082\u304a\u305d\u3089\u304f\u53ef\u80fd)<\/p>\n\n\n\n<h4 class=\"wp-block-comcent-blog-headline01 modHeadline\">\u306f\u3058\u3081\u306b<\/h4>\n\n\n\n<p>\u4eca\u56de\u306f\u3001VB.NET\u3092\u4f7f\u3063\u3066\u8907\u6570\u306ePDF\u30d5\u30a1\u30a4\u30eb\u3092\u975e\u540c\u671f\u306b\u5370\u5237\u3059\u308b\u65b9\u6cd5\u3092\u3054\u7d39\u4ecb\u3057\u307e\u3059\u3002<br>\u5370\u5237\u3059\u308b\u90e8\u5206\u3092\u975e\u540c\u671f\u306eTask\u3067\u4f5c\u6210\u3057\u3066\u3044\u308b\u305f\u3081\u3001\u5370\u5237\u4e2d\u3082\u4ed6\u306e\u51e6\u7406\u3092\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u3067\u3059\u3002<br>\u4f8b\u3048\u3070\u3001\u30bf\u30b9\u30af\u30c8\u30ec\u30a4\u306b\u30a2\u30a4\u30b3\u30f3\u3092\u8868\u793a\u3057\u3001\u305d\u306e\u30e1\u30cb\u30e5\u30fc\u304b\u3089\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u7d42\u4e86\u3055\u305b\u305f\u308a\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u672c\u4f53\u306e\u5370\u5237\u3059\u308b\u30d7\u30ed\u30b0\u30e9\u30e0\u306f\u30e2\u30b8\u30e5\u30fc\u30eb\u3067\u4f5c\u6210\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-comcent-blog-headline01 modHeadline\">\u521d\u671f\u8a2d\u5b9a<\/h4>\n\n\n\n<div class=\"pageCodeArea\">\n  <pre><code>printerName = \u5370\u5237\u3059\u308b\u30d7\u30ea\u30f3\u30bf\u30fc\u540d\nacrobatPath = Acrobat\u306eexe\u30d5\u30a1\u30a4\u30eb\u3078\u306e\u30d1\u30b9\nfilePathList = \u5370\u5237\u3059\u308bPDF\u30d5\u30a1\u30a4\u30eb\u3078\u306e\u30d1\u30b9\u306eList\nprocessList As List(Of ProcessInfo)<\/code><\/pre>\n<\/div>\n\n\n\n<div class=\"pageCodeArea\">\n  <pre><code>'ProcessInfo\u30af\u30e9\u30b9 \u8907\u6570\u306e process \u3092\u7ba1\u7406\u3059\u308b\u305f\u3081\u4f5c\u6210\nPrivate Class ProcessInfo\n        Public Property Process As Process\n        Public ReadOnly Property Filename As String\n        Public Property HasExited As Boolean\n        Public Property ErrorMsg As String\n    Public Sub New(process As Process, filename As String)\n        Me.Process = process\n        Me.Filename = filename\n        \n        HasExited = False\n    End Sub\nEnd Class<\/code><\/pre><\/div>\n\n\n\n<h4 class=\"wp-block-comcent-blog-headline01 modHeadline\">\u30d7\u30ea\u30f3\u30bf\u30fc\u5b58\u5728\u78ba\u8a8d<\/h4>\n\n\n\n<p>\u8a2d\u5b9a\u3055\u308c\u305f printerName \u306e\u30d7\u30ea\u30f3\u30bf\u30fc\u304c\u3001PC\u3068\u63a5\u7d9a\u3055\u308c\u3066\u3044\u308b\u304b\u306e\u78ba\u8a8d\u3092\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"pageCodeArea\">\n  <pre><code>'Module1.main\nDim printerSettings As New PrinterSettings()\nFor Each printer As String In PrinterSettings.InstalledPrinters\n    If printer = printerName Then\n        Return True\n    End If\nNext\nReturn False\n<\/code><\/pre><\/div>\n\n\n\n<h4 class=\"wp-block-comcent-blog-headline01 modHeadline\">PDF\u30d5\u30a1\u30a4\u30eb\u306e\u6570\u3076\u3093\u30eb\u30fc\u30d7<\/h4>\n\n\n\n<div class=\"pageCodeArea\">\n  <pre><code>'Module1.main\nFor Each filePath As String In filePathList\n    '\u3059\u3053\u3057sleep\u3059\u308b\n    Thread.Sleep(1000)\n    PrintPdfAsync(filePath)\nNext<\/code><\/pre><\/div>\n\n\n\n<h4 class=\"wp-block-comcent-blog-headline01 modHeadline\">\u975e\u540c\u671f\u51e6\u7406\u4e2d\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u7d42\u4e86\u3057\u306a\u3044\u3088\u3046\u306b\u5f85\u6a5f<\/h4>\n\n\n\n<div class=\"pageCodeArea\">\n  <pre><code>'Module1.main\n'Imports System.Windows.Forms\nApplication.Run()<\/code><\/pre><\/div>\n\n\n\n<h4 class=\"wp-block-comcent-blog-headline01 modHeadline\">Task\u3067\u5370\u5237\u51e6\u7406\u3092\u958b\u59cb<\/h4>\n\n\n\n<div class=\"pageCodeArea\">\n  <pre><code>'Module1\nPrivate Sub PrintPdfAsync(filePath As String)\n    Task.Run(Sub()\n        Dim result = PrintPdfClass.PrintPdf(filePath)\n        If Not result Then\n            ' PrintPdf\u304cFalse\u3092\u8fd4\u3057\u305f\u5834\u5408\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u7d42\u4e86\u3059\u308b\n            PrintPdfClass.Dispose()\n            Environment.Exit(0)\n        End If\n    End Sub)\nEnd Sub<\/code><\/pre><\/div>\n\n\n\n<h4 class=\"wp-block-comcent-blog-headline01 modHeadline\">Acrobat\u3092\u958b\u304d\u3001\u5370\u5237\u3059\u308b<\/h4>\n\n\n\n<p>\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u7b49\u7701\u7565\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u5931\u6557\u3057\u305f\u5834\u5408\u306b false \u3092\u8fd4\u3059\u3053\u3068\u3067\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u7d42\u4e86\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"pageCodeArea\">\n  <pre><code>'PrintPdfClass\nPublic Function PrintPdf(filePath As String) As Boolean\n    Dim printArgs As String = String.Format(\"\/h \/t \"\"{0}\"\" \"\"{1}\"\"\", filePath,    printerName)\n    ' Acrobat Reader\u3092\u8d77\u52d5\u3057\u3066PDF\u30d5\u30a1\u30a4\u30eb\u3092\u5370\u5237\u3059\u308b\n    Dim processInfo As New ProcessStartInfo(acrobatPath, printArgs)\n    processInfo.CreateNoWindow = True\n    processInfo.WindowStyle = ProcessWindowStyle.Hidden\n    Dim process = New Process With {\n        .EnableRaisingEvents = True,\n        .StartInfo = processInfo\n    }\n    AddHandler process.Exited, AddressOf ProcessExited\n    Dim processInfoClass As New ProcessInfo(process, filePath)\n    processList.Add(processInfoClass)\n    process.Start()\n    Return True\nEnd Function<\/code><\/pre><\/div>\n\n\n\n<h4 class=\"wp-block-comcent-blog-headline01 modHeadline\">process\u304cexited\u306e\u3068\u304d\u3001\u7d42\u4e86\u51e6\u7406\u3092\u884c\u3046<\/h4>\n\n\n\n<div class=\"pageCodeArea\">\n  <pre><code>'PrintPdfClass\n'Acrobat\u306e\u30a6\u30a3\u30f3\u30c9\u30a6\u3092\u9589\u3058\u308b\u3068\u304d\u306b\u4f7f\u7528\u3059\u308b\nPrivate Declare Function FindWindow Lib \"user32.dll\" Alias \"FindWindowA\" (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr\nPrivate Declare Function SendMessage Lib \"user32.dll\" Alias \"SendMessageA\" (ByVal hWnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer\nPrivate Const WM_SYSCOMMAND As Integer = &amp;H112\nPrivate Const SC_CLOSE As Integer = &amp;HF060\nPrivate Sub ProcessExited(sender As Object, e As EventArgs)\n    Dim exitedProcess As Process = CType(sender, Process)\n    exitedProcess.Dispose()\n    '\u3059\u3079\u3066\u306e\u30d7\u30ed\u30bb\u30b9\u304c\u7d42\u4e86\u3057\u305f\u5834\u5408\u306eIf\u5185\u3067\n    ' Acrobat Reader\u306e\u30a6\u30a3\u30f3\u30c9\u30a6\u3092\u9589\u3058\u308b\u51e6\u7406\u3092\u975e\u540c\u671f\u306b\u5b9f\u884c\u3059\u308b\n    Task.Run(\n        Sub()\n            ' Acrobat Reader\u306e\u30a6\u30a3\u30f3\u30c9\u30a6\u3092\u63a2\u3059\n            Dim adobeWindowHandle As IntPtr = IntPtr.Zero\n            Do Until adobeWindowHandle &lt;&gt; IntPtr.Zero\n                adobeWindowHandle = FindWindow(\"AcrobatSDIWindow\", vbNullString)\n            Loop\n        \u3000\u3000' Acrobat Reader\u306e\u30a6\u30a3\u30f3\u30c9\u30a6\u3092\u9589\u3058\u308b\n            SendMessage(adobeWindowHandle, WM_SYSCOMMAND, SC_CLOSE, 0)\n        End Sub\n    )\nEnd Sub<\/code><\/pre><\/div>\n\n\n\n<h4 class=\"wp-block-comcent-blog-headline01 modHeadline\">Dispose\u3067\u3059\u3079\u3066\u306eprocess\u3092\u7d42\u4e86\u3059\u308b<\/h4>\n\n\n\n<div class=\"pageCodeArea\">\n  <pre><code>Public Sub Dispose()\n    For Each processInfo In processList\n        processInfo.Process.Dispose()\n    Next\nEnd Sub<\/code><\/pre><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>\u4ee5\u4e0a\u306e\u30b3\u30fc\u30c9\u3067\u3001\u30ed\u30fc\u30ab\u30eb\u306ePDF\u30d5\u30a1\u30a4\u30eb\u3092\u5370\u5237\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u3067\u3059\u3002<br>\u3053\u308c\u3089\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u3042\u308b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u3042\u308bPDF\u3092\u5168\u3066\u5370\u5237\u3057\u305f\u308a\u3001Windows\u306e\u30bf\u30b9\u30af\u30b9\u30b1\u30b8\u30e5\u30fc\u30e9\u3067\u5b9a\u671f\u7684\u306b\u5b9f\u884c\u3059\u308b\u3053\u3068\u3067\u5370\u5237\u306e\u81ea\u52d5\u5316\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002<br>\u4f7f\u7528\u7528\u9014\u306b\u5408\u308f\u305b\u3066\u6539\u5909\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-comcent-blog-headline01 modHeadline\">\u6700\u5f8c\u306b<\/h4>\n\n\n\n<p>\u9ad8\u6821\u751f\u306e\u3068\u304d\u306bVisual Basic\u3067\u30a2\u30ca\u30ed\u30b0\u6642\u8a08\u3092\u4f5c\u3063\u305f\u308a\u3057\u305f\u7d4c\u9a13\u306f\u3042\u308a\u307e\u3057\u305f\u304c\u3001\u672c\u683c\u7684\u306a\u30d7\u30ed\u30b0\u30e9\u30e0\u306f\u521d\u3081\u3066\u3067\u3057\u305f\u3002<br>\u3059\u3093\u306a\u308a\u3068\u306f\u3044\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u304c\u3001\u5f62\u306b\u306a\u3063\u3066\u3068\u3066\u3082\u3046\u308c\u3057\u304b\u3063\u305f\u3067\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4f5c\u6210\u65e5\uff1a2023\/05\/31\u6700\u7d42\u66f4\u65b0\u65e5\uff1a2023\/05\/31 \u30a8\u30c7\u30a3\u30bf\u30fc\uff1aVisual Studio Community 2022 17.4.4\u30bf\u30fc\u30b2\u30c3\u30c8\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\uff1a.NET Framework 4.7.2Adobe [&hellip;]<\/p>\n","protected":false},"author":10,"featured_media":2802,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[14],"tags":[34,153,145,154],"coauthors":[48],"class_list":["post-2699","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-backend","tag-pdf","tag-vb-net","tag-windows","tag-154"],"author_meta":{"nickname":"A.A","position":"\u30d7\u30ed\u30b0\u30e9\u30de\u30fc","icon_url":"https:\/\/comcent.co.jp\/blog\/images\/authorAa-150x150.png","author_url":"https:\/\/comcent.co.jp\/blog\/archives\/author\/aida\/"},"tag_names":["pdf","VB.NET","Windows","\u5370\u5237"],"thumbnail_url":"https:\/\/comcent.co.jp\/blog\/wp-content\/uploads\/2023\/05\/\u30d1\u30bf\u30fc\u30f3A-1-300x200.jpg","_links":{"self":[{"href":"https:\/\/comcent.co.jp\/blog\/wp-json\/wp\/v2\/posts\/2699","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/comcent.co.jp\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/comcent.co.jp\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/comcent.co.jp\/blog\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/comcent.co.jp\/blog\/wp-json\/wp\/v2\/comments?post=2699"}],"version-history":[{"count":5,"href":"https:\/\/comcent.co.jp\/blog\/wp-json\/wp\/v2\/posts\/2699\/revisions"}],"predecessor-version":[{"id":2838,"href":"https:\/\/comcent.co.jp\/blog\/wp-json\/wp\/v2\/posts\/2699\/revisions\/2838"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/comcent.co.jp\/blog\/wp-json\/wp\/v2\/media\/2802"}],"wp:attachment":[{"href":"https:\/\/comcent.co.jp\/blog\/wp-json\/wp\/v2\/media?parent=2699"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/comcent.co.jp\/blog\/wp-json\/wp\/v2\/categories?post=2699"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/comcent.co.jp\/blog\/wp-json\/wp\/v2\/tags?post=2699"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/comcent.co.jp\/blog\/wp-json\/wp\/v2\/coauthors?post=2699"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}