Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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
C# 我需要将多个文件流附加到同一个pdf文件中_C#_.net_Winforms - Fatal编程技术网

C# 我需要将多个文件流附加到同一个pdf文件中

C# 我需要将多个文件流附加到同一个pdf文件中,c#,.net,winforms,C#,.net,Winforms,我有一个函数,可以将ZPL(斑马标签)转换为PDF格式并保存文件。我试图做的不是每次都覆盖文件,而是将文件流附加到文件(如果存在),写入新文件(如果不存在) 我试着用filemode.append设置一个新的filestream,这似乎没有什么不同 private static void SaveLabel(string label, string labelDir, string caseNumber) { var zpl = Encoding.UTF8.GetByte

我有一个函数,可以将
ZPL
(斑马标签)转换为PDF格式并保存文件。我试图做的不是每次都覆盖文件,而是将文件流附加到文件(如果存在),写入新文件(如果不存在)

我试着用filemode.append设置一个新的filestream,这似乎没有什么不同

private static void SaveLabel(string label, string labelDir, string caseNumber)
    {
        var zpl = Encoding.UTF8.GetBytes(label);
        var fileName = $@"{labelDir}\{caseNumber}.pdf";

        // adjust print density (8dpm), label width (4 inches), label height (6 inches), and label index (0) as necessary
        var request = (HttpWebRequest)WebRequest.Create("http://api.labelary.com/v1/printers/8dpmm/labels/4x6/0/");
        request.Method = "POST";
        request.Accept = "application/pdf"; // omit this line to get PNG images back
        request.ContentType = "application/x-www-form-urlencoded";
        request.ContentLength = zpl.Length;

        var requestStream = request.GetRequestStream();
        requestStream.Write(zpl, 0, zpl.Length);
        requestStream.Close();

        try
        {
            var response = (HttpWebResponse)request.GetResponse();
            var responseStream = response.GetResponseStream();
            if (!File.Exists(fileName))
                File.Create(fileName);

            using (var fileStream = File.Open(fileName, FileMode.Append))
            {
                responseStream?.CopyTo(fileStream);
                responseStream?.Close();
                fileStream.Close();
            }
        }
        catch (WebException e)
        {
            Console.WriteLine(@"Error: {0}", e.Status);
        }
    }

我首先检查文件是否存在(这意味着货物将有多个标签)。如果没有,则按正常程序处理。如果是,则将该文件读入新的pdf文件。然后将当前响应流的内容读入第二个新的pdf文件

然后删除目标文件,释放新组合pdf的名称。然后,我使用建议的PDFSharp链接,合并页面并另存为原始文件名。这将启用文件的连续追加,无论生成了多少个包标签

private static void SaveLabel(string label, string labelDir, string caseNumber)
    {
        var zpl = Encoding.UTF8.GetBytes(label);
        var destFileName = $@"{labelDir}\{caseNumber}.pdf";

        // adjust print density (8dpm), label width (4 inches), label height (6 inches), and label index (0) as necessary
        var request = (HttpWebRequest)WebRequest.Create("http://api.labelary.com/v1/printers/8dpmm/labels/4x6/0/");
        request.Method = "POST";
        request.Accept = "application/pdf"; // omit this line to get PNG images back
        request.ContentType = "application/x-www-form-urlencoded";
        request.ContentLength = zpl.Length;

        var requestStream = request.GetRequestStream();
        requestStream.Write(zpl, 0, zpl.Length);
        requestStream.Close();

        try
        {
            var response = (HttpWebResponse)request.GetResponse();
            var responseStream = response.GetResponseStream();

            if (File.Exists(destFileName))
            {
                var oldStream = File.OpenRead(destFileName);
                var oldFileName = $@"{labelDir}\{caseNumber}-1.pdf";
                using (var fileStream = File.Open(oldFileName, FileMode.Create))
                {
                    oldStream.CopyTo(fileStream);
                    oldStream.Close();
                    fileStream.Close();
                }

                var newFileName = $@"{labelDir}\{caseNumber}-2.pdf";
                using (var fileStream = File.Open(newFileName, FileMode.Create))
                {
                    responseStream?.CopyTo(fileStream);
                    responseStream?.Close();
                    fileStream.Close();
                }

                File.Delete(destFileName);

                using (var pdfOne = PdfReader.Open(oldFileName, PdfDocumentOpenMode.Import))
                {
                    using (var pdfTwo = PdfReader.Open(newFileName, PdfDocumentOpenMode.Import))
                    {
                        using (var outPdf = new PdfDocument())
                        {
                            CopyPages(pdfOne, outPdf);
                            CopyPages(pdfTwo, outPdf);

                            outPdf.Save(destFileName);
                        }
                    }
                }

                File.Delete(oldFileName);
                File.Delete(newFileName);
            }
            else
            {
                using (var fileStream = File.Open(destFileName, FileMode.Create))
                {
                    responseStream?.CopyTo(fileStream);
                    responseStream?.Close();
                    fileStream.Close();
                }
            }
        }
        catch (WebException e)
        {
            Console.WriteLine(@"Error: {0}", e.Status);
        }
    }

您能否添加一个描述,说明您更改了什么以及为什么它解决了问题?我首先检查文件是否存在(这意味着装运时将有多个标签)。如果没有,则按正常程序处理。如果是,则将该文件读入新的pdf文件。然后将当前响应流的内容读入第二个新的pdf文件。然后删除目标文件,释放新组合pdf的名称。然后,我使用建议的PDFSharp链接,合并页面并另存为原始文件名。这将启用文件的连续追加,无论生成了多少个包标签。单击答案下方的“编辑”链接,并将其添加到代码上方。