トップ回答者
画面のハードコピーをPDFにしたい

質問
-
お世話になっております。黒と申します。
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が作成されているようにしたいです。
アドバイスいただけると助かります。
回答
-
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
すべての返信
-
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