私は1つのテーブルが動的であるという点で1つのPDFを持っており、既存のPDFに動的にそのテーブルに別のテーブルを追加します。iTExtsharpを使用して既存のPDFにテーブルを追加する
既存のPDFの特定の場所にテーブルを追加する方法はありますか(ドキュメントの最後ではありません)が完了したら、テーブルを追加します。
どうすれば追加できますか?私には良い方法を教えてください。
下記の画像をご覧ください。
おかげで、DataTableの
私は1つのテーブルが動的であるという点で1つのPDFを持っており、既存のPDFに動的にそのテーブルに別のテーブルを追加します。iTExtsharpを使用して既存のPDFにテーブルを追加する
既存のPDFの特定の場所にテーブルを追加する方法はありますか(ドキュメントの最後ではありません)が完了したら、テーブルを追加します。
どうすれば追加できますか?私には良い方法を教えてください。
下記の画像をご覧ください。
おかげで、DataTableの
using iTextSharp.text;
using iTextSharp.text.pdf;
/// Function which will create pdf document and save in the server folder
private void ExportDataToPDFTable()
{
Document doc = new Document(iTextSharp.text.PageSize.LETTER, 10, 10, 42, 35);
try
{
string pdfFilePath = Server.MapPath(".") + "/pdf/myPdf.pdf";
//Create Document class object and set its size to letter and give space left, right, Top, Bottom Margin
PdfWriter wri = PdfWriter.GetInstance(doc, new FileStream(pdfFilePath, FileMode.Create));
doc.Open();//Open Document to write
Font font8 = FontFactory.GetFont("ARIAL", 7);
//Write some content
Paragraph paragraph = new Paragraph("Using ITextsharp I am going to show how to create simple table in PDF document ");
DataTable dt = GetDataTable();
if (dt != null)
{
//Craete instance of the pdf table and set the number of column in that table
PdfPTable PdfTable = new PdfPTable(dt.Columns.Count);
PdfPCell PdfPCell = null;
//Add Header of the pdf table
PdfPCell = new PdfPCell(new Phrase(new Chunk("ID", font8)));
PdfTable.AddCell(PdfPCell);
PdfPCell = new PdfPCell(new Phrase(new Chunk("Name", font8)));
PdfTable.AddCell(PdfPCell);
//How add the data from datatable to pdf table
for (int rows = 0; rows < dt.Rows.Count; rows++)
{
for (int column = 0; column < dt.Columns.Count; column++)
{
PdfPCell = new PdfPCell(new Phrase(new Chunk(dt.Rows[rows][column].ToString(), font8)));
PdfTable.AddCell(PdfPCell);
}
}
PdfTable.SpacingBefore = 15f; // Give some space after the text or it may overlap the table
doc.Add(paragraph);// add paragraph to the document
doc.Add(PdfTable); // add pdf table to the document
}
}
catch (DocumentException docEx)
{
//handle pdf document exception if any
}
catch (IOException ioEx)
{
// handle IO exception
}
catch (Exception ex)
{
// ahndle other exception if occurs
}
finally
{
//Close document and writer
doc.Close();
}
}
サンプル:これを行う最も簡単な方法は、所望の位置に目的のテーブルを使用して新しいPDFを作成することです
private DataTable GetDataTable()
{
// Create an object of DataTable class
DataTable dataTable = new DataTable("MyDataTable");//Create ID DataColumn
DataColumn dataColumn_ID = new DataColumn("ID", typeof(Int32));
dataTable.Columns.Add(dataColumn_ID);//Create another DataColumn Name
DataColumn dataColumn_Name = new DataColumn("Name", typeof(string));
dataTable.Columns.Add(dataColumn_Name);
//Now Add some row to newly created dataTable
DataRow dataRow;for (int i = 0; i < 5; i++)
{
dataRow = dataTable.NewRow();
// Important you have create New row
dataRow["ID"] = i;dataRow["Name"] = "Some Text " + i.ToString();
dataTable.Rows.Add(dataRow);
}
dataTable.AcceptChanges();
return dataTable;
}
あなたのコードは新しいPDFを作成しますが、元の質問は既存の質問に既存の質問を追加するよう求めます。 – mkl
はい@mklこれはIRELEVENT ANSWER ..です! –
断然それを既存のPDFにスタンプします。これはコード内で(例えば)PdfStamper
クラスを使用して行うことができますが、pdftk
などのスタンドアロンツールもあります。これをPDFの「編集」とはみなさず、元のものの上に新しいものを落とすと考えてください。
pdftk original.pdf stamp newtable.pdf output combined.pdf
本当に面白いと潜在的に難しい部分は、@のMKLの元の質問で取り上げた - どのように新しいテーブルの正確な位置を決定します。あなたが幾何学的なルールを考え出すことができれば、あなたは良い形になっています。これに元のファイルの解析が含まれている場合は、既存のテーブルの行数を決定する(一見)簡単なことが時には非常に困難になることがあることに注意してください。おそらく、HTMLの<table>
タグがコンテンツストリームに埋め込まれているように見えます。実際のPDFの例があれば、非常に役に立ちます。 PDFのイメージは同じものではありません。
のレイアウトを解析すると、のPDFが簡単に読み取れます。これはPDFリーダーが行うことです。 PDFののコンテンツを解析することは、まったく異なるものであり、はるかに困難です。たとえば、投稿したPDF画像を上から下に描画したり、ヘッダーとフッターを最初に描画したり、すべての太字の項目を入力したり、プレーンテキストを続けたりすることができます。物理レイアウト内で2つのものが隣り合っているからといって、それらがファイル構造、オブジェクトツリー、またはコンテンツストリームで互いに隣り合っていることを意味するわけではありません。それは、テキストファイルやビットマップではなく、ベクトルグラフィックです。 PDFは、それを作成するソフトウェアが、コンテンツの編集方法の手がかりを提供しない限り、編集可能に設計されていません。 のようなものがたくさんあります。は簡単ですが、PDFがどのように構築されているか理解すれば、それは難しいことになります。私はあなたの仕事の大きさに感謝するために、これをあなたを落胆させるために言っているわけではありません。このPDFが作成されたソース文書をトレースすることができれば、より多くの成功を収めることができます。
あなたはiTextSharpに言及しています。このライブラリは、PdfStamperクラスを使用して既存のpdfsを操作することを可能にします。より興味深いのは、新しいデータを追加する既存のPDFの位置をどのように認識するかという疑問です。 – mkl
あなたのコメントのためにこんにちはMklありがとう。どのように私は既存のPDFの位置を認識できるので、私はテーブルを追加することができます。どんな例を挙げてもいいですか? –
例はありますか?いいえ、多くの場合(すべてではない)不可能なことを求めているからです。そのため、mklが既存のPDFの位置を認識する方法についての質問を書いたのは、より興味深い質問です。その質問に答えることができない場合は(おそらく不可能なことを尋ねているので)実際の質問は無関係です。誰もあなたのためにその質問に答えることはできません。誰も既存のPDFがどのように見えるか知っているからです。 –