文件已损坏,无法在Itextsharp pdf创建中打开

文件已损坏,无法在Itextsharp pdf创建中打开,pdf,itextsharp,Pdf,Itextsharp,如果这不是一个很有建设性的问题,我很抱歉,但相信我,这个问题对我打击很大。下面是对情况的描述。 我想创建一个平均分为两部分的pdf页面。我在谷歌上搜索并了解到,ColumnText可用于对itexthsarp的最新.dll执行相同的操作 所以我得到了这样的代码 public static void paraPDF() { string imagepath = "D:\\pdf\\Hello.pdf"; Document doc = new Docu

如果这不是一个很有建设性的问题,我很抱歉,但相信我,这个问题对我打击很大。下面是对情况的描述。 我想创建一个平均分为两部分的pdf页面。我在谷歌上搜索并了解到,
ColumnText
可用于对itexthsarp的最新.dll执行相同的操作

所以我得到了这样的代码

    public static void paraPDF()
    {
        string imagepath = "D:\\pdf\\Hello.pdf";
        Document doc = new Document();
        try
        {
            string TEXT = "This is some long paragraph that will be added over and over again to prove a point.";
            Rectangle[] COLUMNS = { new Rectangle(36, 36, 290, 806), new Rectangle(305, 36, 559, 806) };
            PdfWriter writer2 = PdfWriter.GetInstance(doc, new FileStream(imagepath, FileMode.Create));
            doc.Open();
            PdfContentByte canvas = writer2.DirectContent;
            ColumnText ct = new ColumnText(canvas);
            int side_of_the_page = 0;
            ct.SetSimpleColumn(COLUMNS[side_of_the_page]);
            int paragraphs = 0;
            while (paragraphs < 30)
            {
                ct.AddElement(new Paragraph(String.Format("Paragraph %s: %s", ++paragraphs, TEXT)));
                while (ColumnText.HasMoreText(ct.Go()))
                {
                    if (side_of_the_page == 0)
                    {
                        side_of_the_page = 1;
                        canvas.MoveTo(297.5f, 36);
                        canvas.LineTo(297.5f, 806);
                        canvas.Stroke();
                    }
                    else
                    {
                        side_of_the_page = 0;
                        doc.NewPage();
                    }
                    ct.SetSimpleColumn(COLUMNS[side_of_the_page]);

                }
            }
            doc.Close();
        }
        catch { 


        }
    }
}
public static void paraPDF()
{
字符串imagepath=“D:\\pdf\\Hello.pdf”;
单据单据=新单据();
尝试
{
string TEXT=“这是一段很长的段落,将反复添加以证明一点。”;
矩形[]列={新矩形(36,36,290,806),新矩形(305,36,559,806)};
PdfWriter writer2=PdfWriter.GetInstance(doc,newfilestream(imagepath,FileMode.Create));
doc.Open();
PdfContentByte canvas=writer2.DirectContent;
ColumnText ct=新的ColumnText(画布);
页面的int-side\u=0;
ct.SetSimpleColumn(列[页面的侧边]);
int=0;
而(第30段)
{
添加元素(新段落(字符串格式(“段落%s:%s”,++段落,文本));
while(ColumnText.HasMoreText(ct.Go()))
{
如果(页面的侧边=0)
{
_页面的_面=1;
canvas.MoveTo(297.5f,36);
canvas.LineTo(297.5f,806);
canvas.Stroke();
}
其他的
{
_页面的_面=0;
doc.NewPage();
}
ct.SetSimpleColumn(列[页面的侧边]);
}
}
doc.Close();
}
捕获{
}
}
}
在运行上述方法时,由于大小不为零kb,正在创建pdf文件,其中包含一些数据,但我无法打开,因为我收到错误,因为..
该文件已损坏,无法在Itextsharp pdf创建中打开

请帮帮我。 提前感谢。

您遇到了两个问题:

  • 您将
    doc.close()
    放在了错误的位置。我已经在你的问题中解决了这个问题。这解决了“文件已损坏”问题,揭示了关于字符串格式的第二个问题
  • 您在C#中使用Java语法,因此字符串格式都是错误的
  • 在Java中,您可以执行以下操作:

    String.format("Paragraph %s: %s", ++paragraphs, TEXT)
    
    在C#中,您需要执行以下操作:

    String.Format("Paragraph {0}: {1}", ++paragraphs, TEXT)
    

    免责声明:我不知道C。我从来没有写过C#程序。我刚刚在谷歌上搜索了答案,这就是我发现的。如果不正确,我会搜索更多。

    在文本编辑器中打开文件时,文件是否以%%EOF结尾?您在代码片段中做了一些危险的事情:您有一个“catch”子句“eats exceptions”,在“try”子句中有
    doc.close()
    。如果你不说抛出了哪个异常,没有人能帮助你。实际上,你在while循环中有
    doc.close()
    。这不可能是对的。请允许我更新您的问题。@BrunoLowagie好的,我把doc.close()放进去了此时此刻,我能够打开文件..但我没有获得将页面分成两半的columntext格式的数据..@BrunoLowagie我只获得了创建的PDFB中的
    段落%s:%s
    ,但您仍然没有告诉我们您在catch子句中忽略了哪个异常。请理解,您对那些花时间试图回答您的问题的人隐瞒了重要信息。好的,先生。我已经更改了doc.close()和string.Format。现在又是文件损坏且无法打开的标题问题。错误您可以共享PDF吗。是否以%%EOF结尾?另外:如果无法打开文件,您如何知道字符串显示为
    段落%s:%s
    ?%PDF-1.4%s–ÏÓ这是记事本中的PDF内容,它是在调用
    doc.open()
    时编写的PDF标题。如果未写入任何其他内容,则会遇到异常,导致无法添加任何其他数据。你是在阻挠那些试图帮助你的人,因为你没有透露例外情况的性质。因此,假设您对问题的答案并不感兴趣。如果该假设是错误的,请遵守并解释引发的异常。我得到的索引(基于零)必须大于或等于零,并且小于参数列表的大小。捕捉错误