반응형
ITextSharp 기존 PDF에 텍스트 삽입
제목은 모든 것을 요약합니다.
iTextSharp를 사용하여 기존 PDF 파일에 텍스트를 추가하고 싶지만 웹 어디에서나 방법을 찾을 수 없습니다.
PS : PDF 양식을 사용할 수 없습니다.
나는 그것을 할 방법을 찾았습니다 (최고인지는 모르지만 작동합니다)
string oldFile = "oldFile.pdf";
string newFile = "newFile.pdf";
// open the reader
PdfReader reader = new PdfReader(oldFile);
Rectangle size = reader.GetPageSizeWithRotation(1);
Document document = new Document(size);
// open the writer
FileStream fs = new FileStream(newFile, FileMode.Create, FileAccess.Write);
PdfWriter writer = PdfWriter.GetInstance(document, fs);
document.Open();
// the pdf content
PdfContentByte cb = writer.DirectContent;
// select the font properties
BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252,BaseFont.NOT_EMBEDDED);
cb.SetColorFill(BaseColor.DARK_GRAY);
cb.SetFontAndSize(bf, 8);
// write the text in the pdf content
cb.BeginText();
string text = "Some random blablablabla...";
// put the alignment and coordinates here
cb.ShowTextAligned(1, text, 520, 640, 0);
cb.EndText();
cb.BeginText();
text = "Other random blabla...";
// put the alignment and coordinates here
cb.ShowTextAligned(2, text, 100, 200, 0);
cb.EndText();
// create the new page and add it to the pdf
PdfImportedPage page = writer.GetImportedPage(reader, 1);
cb.AddTemplate(page, 0, 0);
// close the streams and voilá the file should be changed :)
document.Close();
fs.Close();
writer.Close();
reader.Close();
나는 이것이 누군가에게 유용 할 수 있기를 바랍니다 =) (그리고 여기에 오류를 게시하십시오)
위의 훌륭한 답변 외에도 다음은 다중 페이지 문서의 각 페이지에 텍스트를 추가하는 방법을 보여줍니다.
using (var reader = new PdfReader(@"C:\Input.pdf"))
{
using (var fileStream = new FileStream(@"C:\Output.pdf", FileMode.Create, FileAccess.Write))
{
var document = new Document(reader.GetPageSizeWithRotation(1));
var writer = PdfWriter.GetInstance(document, fileStream);
document.Open();
for (var i = 1; i <= reader.NumberOfPages; i++)
{
document.NewPage();
var baseFont = BaseFont.CreateFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
var importedPage = writer.GetImportedPage(reader, i);
var contentByte = writer.DirectContent;
contentByte.BeginText();
contentByte.SetFontAndSize(baseFont, 12);
var multiLineString = "Hello,\r\nWorld!".Split('\n');
foreach (var line in multiLineString)
{
contentByte.ShowTextAligned(PdfContentByte.ALIGN_LEFT, line, 200, 200, 0);
}
contentByte.EndText();
contentByte.AddTemplate(importedPage, 0, 0);
}
document.Close();
writer.Close();
}
}
이것은 나를 위해 일했으며 OutputStream 사용을 포함합니다.
PdfReader reader = new PdfReader(new RandomAccessFileOrArray(Request.MapPath("Template.pdf")), null);
Rectangle size = reader.GetPageSizeWithRotation(1);
using (Stream outStream = Response.OutputStream)
{
Document document = new Document(size);
PdfWriter writer = PdfWriter.GetInstance(document, outStream);
document.Open();
try
{
PdfContentByte cb = writer.DirectContent;
cb.BeginText();
try
{
cb.SetFontAndSize(BaseFont.CreateFont(), 12);
cb.SetTextMatrix(110, 110);
cb.ShowText("aaa");
}
finally
{
cb.EndText();
}
PdfImportedPage page = writer.GetImportedPage(reader, 1);
cb.AddTemplate(page, 0, 0);
}
finally
{
document.Close();
writer.Close();
reader.Close();
}
}
다음은 다른 PDF 클라이언트 ( Adobe , FoxIt 등) 에 표시된 스탬퍼 및 절대 좌표를 사용하는 방법입니다 .
public static void AddTextToPdf(string inputPdfPath, string outputPdfPath, string textToAdd, Point point)
{
//variables
string pathin = inputPdfPath;
string pathout = outputPdfPath;
//create PdfReader object to read from the existing document
using (PdfReader reader = new PdfReader(pathin))
//create PdfStamper object to write to get the pages from reader
using (PdfStamper stamper = new PdfStamper(reader, new FileStream(pathout, FileMode.Create)))
{
//select two pages from the original document
reader.SelectPages("1-2");
//gettins the page size in order to substract from the iTextSharp coordinates
var pageSize = reader.GetPageSize(1);
// PdfContentByte from stamper to add content to the pages over the original content
PdfContentByte pbover = stamper.GetOverContent(1);
//add content to the page using ColumnText
Font font = new Font();
font.Size = 45;
//setting up the X and Y coordinates of the document
int x = point.X;
int y = point.Y;
y = (int) (pageSize.Height - y);
ColumnText.ShowTextAligned(pbover, Element.ALIGN_CENTER, new Phrase(textToAdd, font), x, y, 0);
}
}
참고 URL : https://stackoverflow.com/questions/3992617/itextsharp-insert-text-to-an-existing-pdf
반응형
'code' 카테고리의 다른 글
반응에서 얕은 비교는 어떻게 작동합니까? (0) | 2020.11.01 |
---|---|
.NET Core 프로젝트를 가져와 NuGet 참조를 복사하여 출력을 빌드하는 방법은 무엇입니까? (0) | 2020.11.01 |
Javascript / DOM : DOM 개체의 모든 이벤트를 제거하는 방법은 무엇입니까? (0) | 2020.11.01 |
Rails의 기본 레이크 작업 재정의 (0) | 2020.11.01 |
Android에서 뷰 페이저 스 와이프를 비활성화하거나 활성화하는 방법 (0) | 2020.11.01 |