グラフィックを含む既存のPDFがあり、ユーザーがPDF上のポイントをクリックして、A... B...などのように、クリックしたポイントに文字をドロップできるようにしたい場合ITextSharp はこのようなことを処理できると考えていますが、率直に言って、それを達成する方法がわかりません。いくつかのガイダンスを提供できますか?
5 に答える
商用のQuick PDF Libraryを使用した C# の例を次に示します。
using System;
using System.IO;
using System.Drawing;
using System.Windows.Forms;
using QuickPDFAX0714;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private string LicenseKey = " your key here ";
private string OriginalFileName = "D:\\QuickPDFLibrary\\hello1.pdf";
private string NewFileName = "D:\\QuickPDFLibrary\\hello2.pdf";
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
ShowPDF(OriginalFileName);
}
private void ShowPDF(string fileName)
{
PDFLibrary qp = new PDFLibrary();
qp.UnlockKey(LicenseKey);
qp.LoadFromFile(fileName);
// Fit width of PDF to width of picture box
int dpi = Convert.ToInt32((pictureBox1.Width * 72) / qp.PageWidth());
byte[] bmpData = (byte[])qp.RenderPageToVariant(dpi, 1, 0);
MemoryStream ms = new MemoryStream(bmpData);
Bitmap bmp = new Bitmap(ms);
pictureBox1.Image = bmp;
ms.Dispose();
}
private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
{
PDFLibrary qp = new PDFLibrary();
qp.UnlockKey(LicenseKey);
qp.LoadFromFile(OriginalFileName);
// Calculate co-ordinates, width of PDF fitted to width of PictureBox
double xpos = ((double)e.X / (double)pictureBox1.Width) * qp.PageWidth();
double ypos = qp.PageHeight() - ((double)e.Y / (double)pictureBox1.Width) * qp.PageWidth();
qp.SetTextSize(24);
qp.SetTextColor(1, 0, 0);
qp.DrawText(xpos, ypos, "A");
qp.SaveToFile(NewFileName);
ShowPDF(NewFileName);
}
}
}
PDF を読み込んで、アプリでレンダリングできるもの (つまり、編集可能なドキュメント オブジェクト) に変換し、変更を加えてから、PDF に書き戻したいと思いませんか?
確かに、それはあなたが達成しようとしていることにとっておそらく大変な作業ですが、私が知っているほとんどの PDF ツールは実際には .PDF を直接編集しません。
iTextSharp には、.PDF ファイルをある種のドキュメント ツリーに読み込んで操作できる機能がある場合があります。そのようなことを行うかどうかを確認することから始めて、いくつかのノードを変更したり、注釈に対応するノードを追加したりします。
変更がリアルタイムで反映されているのを確認できない場合があるため、単純なラベル オブジェクトとして .PDF ファイルのレンダリングの上に変更を重ねて変更を「偽装」することをお勧めします。それがおそらく最も簡単な開始方法です。
いいえ、itextsharpはpdfファイルを操作できるため、itextsharpはそれを行うことはできませんが、itextsharpでpdfをレンダリングする方法はありません。
確かに、ITextSharp を使用して既存の PDF にコンテンツを追加できます。その方法を示すことができるサンプルが Web 上にあります。(これを行ってからしばらく経ちましたが、既存の PDF に透かし画像を追加する必要がありました。)
ITextSharp は PDF をうまく読み取れないため、おそらく PDF を表示する別の方法を見つける必要があります。クリックをキャッチできるように、PDF を表示するものの上に透明なウィンドウをオーバーレイする必要がある場合がありますが、それはすべて、見つけたビューアによって異なります。
PDF操作タスクにPDFNet SDKしか使用したことがないことを念頭に置いて、あなたが求めていることはすべてそのライブラリで達成できると思いますが、クリックから場所への座標変換には多少の複雑さに対処する必要があるかもしれません.ドキュメントを作成し、書き込み時に必要な場所にテキストを配置するマトリックスを構築します。
それらは、実験の良い出発点として役立つかもしれない単純な WinForms サンプル PDF ビューア アプリケーションを提供します。
私自身、編集にこれほど深く入り込む必要はありませんでした。ドキュメントの開始点は、FAQ (ページに透かしを追加する方法) とナレッジ ベースにあります。API ドキュメントも非常に広範で、Web サイトで公開されています。