🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

2回答

1408閲覧

c# PDFファイルのページを反転させる方法を教えてください

matsurugi

総合スコア16

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

1クリップ

投稿2019/12/02 22:40

c# PDFSharpを使用してPDFファイルのページを左右反転(鏡像化)させたいと考えています。
PDFSharpを使用したいのはMITライセンスだからです。
画像および文字列すべて含んだ形で左右反転(鏡像化)させる方法を教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

あきらめていたのですができてしまいました。
パスワード付きや暗号化?されているとPDFsharpが開けずエラーになります(web上にあるものって結構パスワード付いてるんですね)

PDFsharpで作ったもの以外にもいくつかやってみましたが、ミラー化できました。
Google Chromeで見たときにページ送り?(元は横に矢印が出てるのに縦スクロールになる)が違ってしまうpdfがありましたがよくわかりません。

参考
PDFsharp Sample: Two Pages on One - PDFsharp and MigraDoc Wiki

cs

1using System.Diagnostics; 2using PdfSharp.Drawing; 3using PdfSharp.Pdf; 4 5namespace Questions226967 6{ 7 class Program 8 { 9 /// <summary>PDFを鏡像化して保存します</summary> 10 /// <param name="inputFilePath">元になるファイルパス</param> 11 /// <param name="outputFilePath">鏡像化したファイルパス</param> 12 static void MirrorPdf(string inputFilePath, string outputFilePath) 13 { 14 XPdfForm form = XPdfForm.FromFile(inputFilePath); // XPdfFormがポイント 15 PdfDocument output = new PdfDocument(); 16 17 for(int i = 0; i < form.PageCount; i++) 18 { 19 form.PageNumber = i + 1; 20 PdfPage page = output.AddPage(); 21 page.Width = form.Page.Width; 22 page.Height = form.Page.Height; 23 24 XRect box = new XRect(0, 0, page.Width, page.Height); 25 XGraphics gfx = XGraphics.FromPdfPage(page); 26 27 gfx.TranslateTransform(page.Width, 0); 28 gfx.ScaleTransform(-1, 1); 29 gfx.DrawImage(form, box); 30 } 31 32 output.Save(outputFilePath); 33 } 34 // 単に入力用のpdfを作っているだけ 35 static void SamplePdf(string outputFilePath) 36 { 37 PdfDocument document = new PdfDocument(); 38 document.Info.Title = "Created with PDFsharp"; 39 XFont font = new XFont("Verdana", 20, XFontStyle.BoldItalic); 40 XImage image = XImage.FromFile(@"file_icon_text_pdf.png"); 41 PdfPage page = document.AddPage(); 42 XGraphics gfx = XGraphics.FromPdfPage(page); 43 gfx.DrawString("Hello, World!", font, XBrushes.Black, 44 new XRect(0, 0, page.Width, page.Height), XStringFormats.Center); 45 gfx.DrawImage(image, 0, 0); 46 document.Save(outputFilePath); 47 } 48 static void Main() 49 { 50 string input = @"HelloWorld.pdf"; 51 string output = "HelloWorld_Mirror.pdf"; 52 SamplePdf(input); 53 54 MirrorPdf(input, output); 55 Process.Start(output); 56 } 57 } 58}

投稿2019/12/03 11:49

編集2023/07/17 05:55
TN8001

総合スコア9855

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

matsurugi

2019/12/04 14:12

早速の回答、ありがとうございます。 ご回答の方法で確かに左右反転できていますが、DrowString、DrawImageしたものが反転するようですね。 やりたいのは、PDFファイルを読み込んで、その内容を左右反転させて別PDFを作りたいと考えています。 なかなかこれといった情報が見つからないため困っています。 何とかならないものなのでしょうか。
TN8001

2019/12/04 23:09

やっぱりそうですか^^; お力になれずすいません。
Zuishin

2019/12/05 04:44

これでいけない理由がわかりません。既存の PDF を開いて新しい PDF に片っ端から反転書き込みしていけばいいと思います。
TN8001

2019/12/05 08:32

もう一度調べなおしたところ、できてしまいました。 できそうな情報が全くなくあきらめモードでしたので、ヒントありがとうございます。
matsurugi

2019/12/07 08:26

TN8001さん ありがとうございます、できました。 この方法が見つからず苦労していたつもりでしたが、まだまだ調査が足りなかったようです。 英語の情報はよくわからないし、困っていました。 回答にある「gfx.TranslateTransform(page.Width, 0);」や「gfx.ScaleTransform(-1, 1);」部分のパラメタの意味も正解を教えられても理解できない状況です。 この辺りをよく知らべてみます。 本当に助かりました。 ありがとうございました。
matsurugi

2019/12/07 08:28

Zuishinさん ありがとうございます。 TN8001さんの最初の回答から、Zuishinさんの言われている様に試してはいたのですが、なかなか実現できないでいました。 まだまだ勉強が足りないようです。
TN8001

2019/12/07 08:42

動いたようでこちらもうれしいです^^ gfxはsystem.drawing.graphicsとコンパチになるように作っているようなので、 「C# Graphics Transform」等で検索したものが大体同じように使えると思います。
guest

0

表示させた上でスクリーンキャプチャして、その画像を反転させるってのでどうでしょう

投稿2019/12/02 23:40

y_waiwai

総合スコア88038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

matsurugi

2019/12/03 09:16

コマンドラインで実行するプログラムが必要でオペレーターの操作は無くしたいのです。 やはり一旦画像化が必要ですかね。
y_waiwai

2019/12/03 09:24

できないことを追い求めてもしようがないと思いますが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問