テーブルが動的であるテーブルが1つあり、既存のPDFでそのテーブルの下に別のテーブルを動的に追加したいという1つのPDFがあります。
既存のテーブル (ドキュメントの最後ではない) が完成した特定の場所に既存の PDF にテーブルを追加する方法はありますか?テーブルを追加したいと思います。
どうすれば追加できますか? 何か良い方法を教えてください。
下の画像を見ての通り。
ありがとう、
テーブルが動的であるテーブルが1つあり、既存のPDFでそのテーブルの下に別のテーブルを動的に追加したいという1つのPDFがあります。
既存のテーブル (ドキュメントの最後ではない) が完成した特定の場所に既存の PDF にテーブルを追加する方法はありますか?テーブルを追加したいと思います。
どうすれば追加できますか? 何か良い方法を教えてください。
下の画像を見ての通り。
ありがとう、
これを行う最も簡単な方法は、目的のテーブルを目的の場所に配置して新しい PDF を作成し、それを既存の PDF にスタンプすることです。これは、(たとえば)PdfStamper
クラスを使用してコードで実行できますが、 やその他の多くのスタンドアロン ツールもありpdftk
ます。これを PDF の「編集」と考えないでください。オリジナルの上に何か新しいものをドロップすると考えてください。
pdftk original.pdf stamp newtable.pdf output combined.pdf
@mkl の元の質問 - 新しいテーブルの正しい位置をどのように決定しますか? 幾何学的なルールを思いつくことができれば、あなたは良い状態です. これに元のファイルの解析が含まれる場合、既存のテーブルの行数を決定するのと同じくらい (一見) 単純なことが非常に困難な場合があることに注意してください。<table>
おそらく、コンテンツ ストリームに埋め込まれた html タグのような通知があります。実際の PDF の例があると非常に役立ちます。PDFの画像は同じものではありません。
背景情報を提供するために、PDF のレイアウトを解析するのは簡単です。それは PDF リーダーが行うことです。PDF のコンテンツの解析はまったく異なり、はるかに困難です。例として、投稿した PDF 画像を上から下に描画するか、ヘッダーとフッターを最初に描画し、次に太字の項目をすべて描画し、その後にプレーン テキストを描画することができます。2 つのものが物理レイアウトで隣り合っているからといって、ファイル構造、オブジェクト ツリー、またはコンテンツ ストリームで隣り合っているとは限りません。これは、テキスト ファイルやビットマップではなく、ベクター グラフィックです。PDF は、それを作成するソフトウェアがコンテンツの編集方法に関する手がかりを具体的に提供しない限り、編集できるようには設計されていません。みたいなのがたくさんあります簡単なはずですが、PDF がどのように作成されるかを理解すれば、それが難しいことは理にかなっています。これはあなたを落胆させるために言っているのではなく、あなたがこの仕事の重要性を理解してもらうためです。この PDF が作成された元のドキュメントをたどることができれば、フラストレーションが減り、より多くの成功を収めることが保証されます。
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();
}
}
サンプルデータテーブル:
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;
}