Java 如何使用itext(itextsharp)将MediaBox移动到0.0
我的PDF文件的MediaBox坐标是(-8,-8),现在我想设置它(0,0) 我试图直接设置,但文件的内容被偏移了。 因此,我想更改MediaBox坐标并移动内容。 这是itextshare代码(c#)。我很高兴能够用javaitext解决这个问题Java 如何使用itext(itextsharp)将MediaBox移动到0.0,java,c#,itext,Java,C#,Itext,我的PDF文件的MediaBox坐标是(-8,-8),现在我想设置它(0,0) 我试图直接设置,但文件的内容被偏移了。 因此,我想更改MediaBox坐标并移动内容。 这是itextshare代码(c#)。我很高兴能够用javaitext解决这个问题 using (PdfReader pdfReader = new PdfReader(@"MediaBoxZero.pdf")) { using (PdfStamper stamper = new PdfStamper(pdfReader,
using (PdfReader pdfReader = new PdfReader(@"MediaBoxZero.pdf"))
{
using (PdfStamper stamper = new PdfStamper(pdfReader, new FileStream(@"MediaBoxZero_Result.pdf", FileMode.Create)))
{
var mediaBox = pdfReader.GetBoxSize(1, "media");
PdfArray mediaBoxN = new PdfArray();
mediaBoxN.Add(new float[] { 0, 0, mediaBox.Width, mediaBox.Height });
for (int curPageNum = 1; curPageNum <= pdfReader.NumberOfPages; ++curPageNum)
{
PdfDictionary pagedict = pdfReader.GetPageN(curPageNum);
pagedict.Put(PdfName.MEDIABOX, mediaBoxN);
}
}
}
使用(PdfReader PdfReader=new PdfReader(@“MediaBoxZero.pdf”))
{
使用(PdfStamper stamper=newpdfstamper(pdfReader,newfilestream(@“MediaBoxZero_Result.pdf”,FileMode.Create)))
{
var mediaBox=pdfReader.GetBoxSize(1,“媒体”);
PdfArray mediaBoxN=新的PdfArray();
Add(新的float[{0,0,mediaBox.Width,mediaBox.Height});
对于(int curPageNum=1;curPageNum,您可以使用iTextSharp这样移动页面内容,以匹配MediaBox的更改:
using(PdfReader PdfReader=newpdfreader(SOURCE\u PDF))
{
对于(int i=1;i问题到底是什么?您的C#代码是否符合要求,并且需要帮助才能将其移植到Java?或者您的C#代码是否会导致文件内容发生偏移,并且您需要iText和iTextSharp的工作解决方案?或者仍然存在其他问题?@mkl此代码会导致内容偏移,因为MediaBox已更改,但内容的位置未更改。我想知道如何更改所有内容的位置。移动页面内容是可行的,只需在前面插入仿射变换。这仍然会移动所有注释。对它们进行迭代,并相应地更改其坐标。此外,我不确定模式是否会表现良好。@mkl我尝试了仿射变换,但它不起作用。我稍后会尝试回答。实际上,UnderContent
有一点是为了不让对图形状态的更改渗透到现有内容中,所以必须绕过这种保护。
using (PdfReader pdfReader = new PdfReader(@"MediaBoxZero.pdf"))
{
using (PdfStamper stamper = new PdfStamper(pdfReader, new FileStream(@"MediaBoxZero_Result.pdf", FileMode.Create)))
{
PdfContentByte pb = stamper.GetOverContent(1);
AffineTransform at = new AffineTransform();
at.Translate(100,0);
pb.Transform(at);
pb.ConcatCTM(at);
//var mediaBox = pdfReader.GetBoxSize(1, "media");
//PdfArray mediaBoxN = new PdfArray();
//mediaBoxN.Add(new float[] { 0, 0, mediaBox.Width, mediaBox.Height });
//for (int curPageNum = 1; curPageNum <= pdfReader.NumberOfPages; ++curPageNum)
//{
// PdfDictionary pagedict = pdfReader.GetPageN(curPageNum);
// foreach (var item in pagedict.GetEnumerator())
// {
// }
// pagedict.Put(PdfName.MEDIABOX, mediaBoxN);
//}
}
}
}