Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用itext(itextsharp)将MediaBox移动到0.0_Java_C#_Itext - Fatal编程技术网

Java 如何使用itext(itextsharp)将MediaBox移动到0.0

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,

我的PDF文件的MediaBox坐标是(-8,-8),现在我想设置它(0,0)

我试图直接设置,但文件的内容被偏移了。 因此,我想更改MediaBox坐标并移动内容。 这是itextshare代码(c#)。我很高兴能够用javaitext解决这个问题

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);
                //}
            }
        }
    }