Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.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/csharp/335.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
使用iTextSharp将javascript添加到pdf文件_Javascript_C#_Pdf_Itextsharp - Fatal编程技术网

使用iTextSharp将javascript添加到pdf文件

使用iTextSharp将javascript添加到pdf文件,javascript,c#,pdf,itextsharp,Javascript,C#,Pdf,Itextsharp,我想在pdf文件中嵌入一个javascript代码片段,以便在从浏览器窗口打开时立即打印。为了实现这一点,我将遵循以下示例 我创建了一个helper类,它有一个静态方法来处理这个任务。我已经准备好将pdf文件路径字符串传递到该方法中。我不明白的是这部分的输出流是如何工作的。我想将更新后的pdf保存到我的服务器硬盘。我不想将它流回到我的浏览器。任何指导都将不胜感激 public class PdfHelper { public static void AddPrintFunction(st

我想在pdf文件中嵌入一个javascript代码片段,以便在从浏览器窗口打开时立即打印。为了实现这一点,我将遵循以下示例

我创建了一个helper类,它有一个静态方法来处理这个任务。我已经准备好将pdf文件路径字符串传递到该方法中。我不明白的是这部分的输出流是如何工作的。我想将更新后的pdf保存到我的服务器硬盘。我不想将它流回到我的浏览器。任何指导都将不胜感激

public class PdfHelper
{
    public static void AddPrintFunction(string pdfPath, Stream outputStream)
    {
        PdfReader reader = new PdfReader(pdfPath);
        int pageCount = reader.NumberOfPages;
        Rectangle pageSize = reader.GetPageSize(1);

        // Set up Writer 
        PdfDocument document = new PdfDocument();

        PdfWriter writer = PdfWriter.GetInstance(document, outputStream);

        document.Open();

        //Copy each page 
        PdfContentByte content = writer.DirectContent;

        for (int i = 0; i < pageCount; i++)
        {
            document.NewPage();
            // page numbers are one based 
            PdfImportedPage page = writer.GetImportedPage(reader, i + 1);
            // x and y correspond to position on the page 
            content.AddTemplate(page, 0, 0);
        }

        // Inert Javascript to print the document after a fraction of a second to allow time to become visible.
        string jsText = "var res = app.setTimeOut(‘var pp = this.getPrintParams();pp.interactive = pp.constants.interactionLevel.full;this.print(pp);’, 200);";

        //string jsTextNoWait = “var pp = this.getPrintParams();pp.interactive = pp.constants.interactionLevel.full;this.print(pp);”;
        PdfAction js = PdfAction.JavaScript(jsText, writer);
        writer.AddJavaScript(js);

        document.Close();

    }
} 

关于如何完成这项任务,请看等帖子

基本上你应该有这样的东西:

var pdfLocalFilePath = Server.MapPath("~/sourceFile.pdf");
var outputLocalFilePath = Server.MapPath("~/outputFile.pdf");
using (var outputStream = new FileStream(outputLocalFilePath, FileMode.CreateNew))
{
    AddPrintFunction(pdfLocalFilePath, outputStream);
    outputStream.Flush();
} 

叹气谁向您展示了如何使用PdfWriter和所有这些getImportedPage调用操作现有文档?为什么不简单地使用PdfStamper呢?我以这个链接上的代码为例,它已经很旧了。似乎很难找到itextsharp的文档。正如该博客的作者所说,代码可能有点粗糙。这类代码可以工作,但尚未完全理解……因此,这类代码不在web应用程序中,而是在我服务器上的web api控制器中;Server.MapPath对我不可用。@Stavros\S,如果您正在使用ASP.NET的Web API,则HttpContext.Current.Server.MapPath确实存在。。。下面是一个如何使用ASP.NET的web API上载文件并将其本地存储在web服务器上的示例:。对于对我的评论/帖子投了否决票的读者-如果您想再解释一下您不同意我所说的原因,我将不胜感激。。。