none
画面のハードコピーをPDFにしたい RRS feed

  • 質問

  • お世話になっております。黒と申します。

    win10  VisualStudio2015Pro vb.netで Windows Formアプリを作っています。

    やりたい事

    タブレットPCでアプリを動作させている状況で画面のハードコピーを記録して、それをPDFにしたいです。

    ツールボックスにあったPrintDocument,PageSetUpDialogなどを使って印刷のPDFで対応しようとしたのですが、保存を2回実行したり、

    印刷がA4横に設定したのにA4縦になって画面が圧縮されてPDFになったりとあまり思ったようになりませんでした。

    確実なのはPrintScreen⇒Paintに貼りつけ⇒PDFで印刷なのは分かっていますが。

    私としては作業工程を極力省きたいので、PrintScreenからPDFにするのにPaintを起動させないでPDFを作りたいと思っています。

    file名も日付時刻.pdfにして、ボタンを押すと任意のフォルダにPDFが作成されているようにしたいです。

    アドバイスいただけると助かります。


    2021年4月19日 10:26

回答

  • nugetで入手できるPDFSharpというライブラリでPDFを直接作成してみる

    Public Class Form1
    
        'nugetでPDFSharp 1.50.5147を入れておいて
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            Dim rect As Rectangle = Screen.PrimaryScreen.Bounds
            Dim bmp As New Bitmap(rect.Width, rect.Height)
            Using g As Graphics = Graphics.FromImage(bmp)
                g.CopyFromScreen(0, 0, 0, 0, rect.Size)
            End Using
    
    
            Dim ms As New System.IO.MemoryStream
            bmp.Save(ms, Imaging.ImageFormat.Png)
            ms.Position = 0
    
            Dim doc As New PdfSharp.Pdf.PdfDocument
            Dim page As PdfSharp.Pdf.PdfPage = doc.Pages.Add()
            page.Width = PdfSharp.Drawing.XUnit.FromMillimeter(297)
            page.Height = PdfSharp.Drawing.XUnit.FromMillimeter(210)
            Dim ximg As PdfSharp.Drawing.XImage = PdfSharp.Drawing.XImage.FromStream(ms)
    
            Using xg As PdfSharp.Drawing.XGraphics = PdfSharp.Drawing.XGraphics.FromPdfPage(page)
                xg.DrawImage(ximg, New PdfSharp.Drawing.XRect(0, 0, page.Width, page.Height), New PdfSharp.Drawing.XRect(ximg.Size), PdfSharp.Drawing.XGraphicsUnit.Point)
            End Using
    
            Dim filename As String = DateTime.Now.ToString("yyyyMMddHHmmss") + ".pdf"
    
            doc.Save(filename)
        End Sub
    End Class

    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答としてマーク 9638masa 2021年4月20日 9:28
    2021年4月19日 12:04

すべての返信

  • nugetで入手できるPDFSharpというライブラリでPDFを直接作成してみる

    Public Class Form1
    
        'nugetでPDFSharp 1.50.5147を入れておいて
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            Dim rect As Rectangle = Screen.PrimaryScreen.Bounds
            Dim bmp As New Bitmap(rect.Width, rect.Height)
            Using g As Graphics = Graphics.FromImage(bmp)
                g.CopyFromScreen(0, 0, 0, 0, rect.Size)
            End Using
    
    
            Dim ms As New System.IO.MemoryStream
            bmp.Save(ms, Imaging.ImageFormat.Png)
            ms.Position = 0
    
            Dim doc As New PdfSharp.Pdf.PdfDocument
            Dim page As PdfSharp.Pdf.PdfPage = doc.Pages.Add()
            page.Width = PdfSharp.Drawing.XUnit.FromMillimeter(297)
            page.Height = PdfSharp.Drawing.XUnit.FromMillimeter(210)
            Dim ximg As PdfSharp.Drawing.XImage = PdfSharp.Drawing.XImage.FromStream(ms)
    
            Using xg As PdfSharp.Drawing.XGraphics = PdfSharp.Drawing.XGraphics.FromPdfPage(page)
                xg.DrawImage(ximg, New PdfSharp.Drawing.XRect(0, 0, page.Width, page.Height), New PdfSharp.Drawing.XRect(ximg.Size), PdfSharp.Drawing.XGraphicsUnit.Point)
            End Using
    
            Dim filename As String = DateTime.Now.ToString("yyyyMMddHHmmss") + ".pdf"
    
            doc.Save(filename)
        End Sub
    End Class

    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答としてマーク 9638masa 2021年4月20日 9:28
    2021年4月19日 12:04
  • gekkaさん

    ありがとうございます。無事PDF化することができました。

    NuGetを使用したことがなかったので、とても助かりました。

    ありがとうございました。

    2021年4月20日 9:30