워터 마크를 추가 한 pdf 문서가 있습니다. 결과는 좋지만, 결과 PDF에 밑줄을 긋기 위해 워터 마크를 사용하면 텍스트 문서의 일부분이 보이기 때문에 밑줄 결과가 잘못되었습니다.
다음은 워터 마크를 적용하는 데 사용 내 코드 :iTextSharp에서 워터 마크가있는 문서에 밑줄 친다
using (System.IO.MemoryStream memWatermark = new MemoryStream(pdfWatermark))
using (System.IO.MemoryStream memIn = new MemoryStream(pdfin))
using (System.IO.MemoryStream memOut = new MemoryStream())
{
memWatermark.Position = 0;
memIn.Position = 0;
memOut.Position = 0;
PdfReader reader = new PdfReader(memIn);
PdfReader wmReader = new PdfReader(memWatermark);
int j = wmReader.NumberOfPages;
if (wmReader.NumberOfPages > 0)
{
Rectangle wmSize = wmReader.GetPageSize(1);
int wmRotation = wmReader.GetPageRotation(1);
using (Document doc = new Document(wmSize))
{
PdfWriter writer = PdfWriter.GetInstance(doc, memOut);
doc.Open();
PdfImportedPage waterMarkPage = writer.GetImportedPage(wmReader, 1);
PdfImportedPage currentPage;
for (int i = 1; i <= reader.NumberOfPages; i++)
{
currentPage = writer.GetImportedPage(reader, i);
//Add the first file to coordinates 0,0
if (wmRotation == 90 || wmRotation == 270)
{
writer.DirectContent.AddTemplate(currentPage, 0, -1f, 1f, 0, 0, wmReader.GetPageSizeWithRotation(i).Height);
}
else
{
writer.DirectContent.AddTemplate(currentPage, 1f, 0, 0, 1f, 0, 0);
}
// set transparency for watermark
var gstate = new PdfGState { FillOpacity = 0.2f, StrokeOpacity = 0.4f };
writer.DirectContent.SaveState();
writer.DirectContent.SetGState(gstate);
//Since we don't call NewPage the next call will operate on the same page
if (wmRotation == 90 || wmRotation == 270)
{
writer.DirectContent.AddTemplate(waterMarkPage, 0, -1f, 1f, 0, 0, wmReader.GetPageSizeWithRotation(1).Height);
}
else
{
writer.DirectContent.AddTemplate(waterMarkPage, 1f, 0, 0, 1f, 0, 0);
}
// reset transparency state to default before adding next page
writer.DirectContent.RestoreState();
// now move to following page
if (i < reader.NumberOfPages)
{
doc.NewPage();
}
}
// flush writer but leave the stream open!
writer.Flush();
writer.CloseStream = false;
}
}
memOut.Position = 0;
if (memOut.Length > 0)
{
pdfout = new byte[memOut.Length];
pdfout = memOut.ToArray();
done = true;
}
}
"밑줄"은 서명 추가를 의미합니까? 워터 마크 자체를 추가하면 원하는 결과를 얻었지만 문서에 더 많은 것을 추가 할 때는 코드가 깨져서 코드가 표시되어야합니다. – Filburt
@ Filburt 안드로이드에서 pspdfkit sdk로 최종 PDF (원본 + 워터 마크)를 편집 중입니다. "밑줄"은 주석을 작성하고 서명이 아닌 문서 텍스트에 밑줄을 긋는 것을 의미합니다. – Marco
설명해 주셔서 감사합니다. itextsharp를 사용하여 밑줄 부분을 사용하고 있다는 인상을받을 수 있으므로 pspdfkit에 대해 언급하는 것이 중요합니다. – Filburt