阅读更多

16顶
0踩

Web前端

原创新闻 使用JavaScript,动态生成PDF

2009-04-23 11:59 by 副主编 zly06 评论(11) 有18278人浏览

 

 

James Hall为大家展示了他最新的项目-jsPDF,一个完全基于JavaScript的PDF生成工具。目前,demo serves生成的PDF会作为一个Data URI,但是他可以用于服务端或浏览器的扩展。虽然目前只能支持简单的文字,但是作者正在努力的尝试将图像和字体嵌入其中。

如果你使用Safari,opera或Firefox 3.5 Beta,这个demo 看上去超酷。浏览器会显示出客户端JavaScript代码生成的一个data URL。

 

 

  • 大小: 34.5 KB
来自: ajaxian
16
0
评论 共 11 条 请登录后发表评论
11 楼 justjavac 2012-04-28 14:30
javagui 写道
javascript不能做的事多了。试编写一个服务器试试,脱离浏览器?

nodejs,现在多火!!!直接无语。
10 楼 murainwood 2009-04-25 00:39
Javascript不能干的事情多了?
---------
很久以前,就可以用纯Javascript写ASP代码了。
难道搞Java的人都不知道这个常识么????
9 楼 redskywy 2009-04-24 12:19
function HTTPD()
{
this.ajax = null;
this.http = null;
this.running = true; //set this.running = false to exit the server
this.types = {'html': "text/html",
              'htm': "text/html",
              'png': "image/png",
              'txt': "text/plain",
              'css': "text/css",
              'svg': "image/svg+xml",
              'js': "application/x-javascript"}
}

HTTPD.prototype.home = function(client,data)
{
client.writeln("Content-type: text/html");
client.writeln();

client.writeln("<html><body><p>Hello, world!</p>")

client.writeln("HTTP headers\n<pre>");
if (client.header)
client.writeln(client.header.toString())
client.writeln("</pre>")

client.writeln("Form fields\n<pre>");
if (data)
client.writeln(data.toString())
client.writeln("</pre>")

client.writeln("</body></html>");
}

HTTPD.prototype.sendOK = function(client)
{
client.writeln("HTTP/1.1 200 OK");
client.writeln("Client: close");
client.writeln("Date: ", client.startTime.toUTCString());
client.writeln("Expires: ", client.startTime.toUTCString());
client.writeln("Server: JSDB/"+system.version);
}

HTTPD.prototype.sendERROR= function(client)
{
client.writeln("HTTP/1.1 404 NOT FOUND");
client.writeln("Client: close");
client.writeln("Date: ", client.startTime.toUTCString());
client.writeln("Expires: ", client.startTime.toUTCString());
client.writeln("Server: JSDB/"+system.version);
client.writeln("Content-type: text/html\n");
client.writeln("<H2>HTTP/1.1 404 Not Found</H2>");
client.writeln("<br>URL:",client.uri);
client.writeln("<br><a href=/>Home</a>");
client.close();
}

HTTPD.prototype.run = function(port)
{
if (!port) port = 8080
if (this.http != null) return;

this.http = null;
for (; this.http == null && port < 8180; port++)
  {
  try {
   this.http = new Server(port);
   } catch(err)
   {
    writeln('Port ', port,' appears to be in use');
   }
  }

system.execute('http://127.0.0.1:'+ this.http.port + '/')
writeln("Server started on port " + this.http.port);

this.running = true
while (this.running && !system.kbhit())
{
   system.gc()
   now = new Date;
   if (!this.http.anyoneWaiting)
    {
     sleep(100);
     continue;
    }

   var client = this.http.accept();
   if (client == null)
    continue;

   var request = client.readLine().split(/\s+/);

   client.method = request[0];
   client.uri = request[1];
   if (client.uri == null || client.uri == '') client.uri = '/';
   client.version = request[2];
   //this.page() should give enough time for the header packet to arrive
   if (client.canRead)
   {
    client.startTime = new Date();
    client.header = new Record;
    client.readMIME(client.header);
   }
   client.page = client.uri.substr(1);
   client.query = ''
   request = client.uri.match(/\/?([^?]*)\?(.*)/);
   if (request != null)
    {
     client.page = request[1];
     client.query = request[2];
    }

   if (client.method == "GET" && client.query)
    client.data = new Record(client.query,'&');
   else if (client.method = "POST" && client.header.get('Content-type') == 'application/x-www-form-urlencoded')
    client.data = new Record(client.read(client.header.get('Content-length')),'&');

   if (client.data)
   {
    for(x=0; x<client.data.length; x++)
      client.data.set(x, decodeURL(client.data.value(x)));
   }

   if (client.page == '')
   {
    try
    {
     this.sendOK(client);
     this.home(client);
    }
    catch(err)
    {
     writeln("Error: ",err);
     client.writeln("Error: ",err);
    }
    client.close();
    continue;
   }

   // filter the file names. No URLs, wildcards, or path changes
   if (client.page.search(/(\\|\/|\*)/) != -1)
   {
    client.close()
    continue;
   }

   if (system.exists(client.page))
   {
   writeln(client.page)
     this.sendOK(client);
     var type = client.page.match(/\.(.+)$/)
     writeln(type.toSource())
     if (type) type = this.types[type[1]]
     if (!type) type = "application/x-unknown"

    try
    {
     var src = new Stream(client.page,"rb")
     client.writeln("Content-type: ",type);
     client.writeln("Content-length: ",src.size);
     client.writeln();
     client.append(src);
     src.close()
    }
    catch(err)
    {
     writeln(err)
    }
    client.close();
    continue;
   }
  
   this.sendERROR(client)
   client.close();

}

this.http.close();
}

var server = new HTTPD();
server.run();
delete server;
8 楼 terryang 2009-04-24 12:10
javagui 写道

javascript不能做的事多了。试编写一个服务器试试,脱离浏览器?

无语了 我对你
7 楼 kimmking 2009-04-24 10:29
kenken0y 写道

javagui 写道
javascript不能做的事多了。试编写一个服务器试试,脱离浏览器?好像真的有,好多年前玩过的,现在居然还活着http://dev.helma.org/



Helma is a server-side Javascript environment and web application framework for fast and efficient scripting and serving of your websites and Internet applications.


只是一个解释器+web框架而已。
类似的还有oscript~

6 楼 kimmking 2009-04-24 10:27
一帮人在混淆JavaScript的概念。

JavaScript应该是一种语言规范,具体实现无所谓,不同的浏览器的js引擎只是的JavaScript其实都不同。

你自己写一个能生成native 的pe的JavaScript实现也是可行的。这个事广义的,
抽象的,能无限大。


目前一般意义上的JavaScript是浏览器里跑的那个JavaScript,这个事狭义的。
能做的还真有限。
5 楼 vb2005xu 2009-04-24 10:08
javascript不能做的事多了。试编写一个服务器试试,脱离浏览器?

这个你不知道么?? 你看看IIS是怎么做的, 不就是脚本引擎+com么
4 楼 whaosoft 2009-04-24 00:59
算了吧 我还是用ireport吧
3 楼 kenken0y 2009-04-23 19:13
javagui 写道

javascript不能做的事多了。试编写一个服务器试试,脱离浏览器?

好像真的有,好多年前玩过的,现在居然还活着
http://dev.helma.org/
2 楼 javagui 2009-04-23 16:12
javascript不能做的事多了。试编写一个服务器试试,脱离浏览器?
1 楼 phpxiaoxin 2009-04-23 13:31
google+插件用javascript做3d,
这个又生成pdf,
javascript还有什么不能干的?
上面两个分别用了javascript的什么功能?

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 面向对象开发实践之路:DELPHI版(带完整书签)

      borland资深专家李维的经典作品,全面介绍了利用主流开发方法学和技术技巧进行面向对象开发的原则与实践,全面展现了作者深厚技术实践经验的精髓。   本书主要介绍了利用主流开发方法学和技术技巧进行面向对象开发的原则与实践,通过完整剖析一个实际应用程序的设计、开发与实现,深入浅出地阐述ood(面向对象开发)、oop(面向对象程序设计)、tdd(测试驱动开发)、ut(单元测试)等开发方法学与最佳实践的应用与技术技巧,全面展现深厚技术实践经验的精髓。全书内容连贯、一气呵成,以实践阐述理论,以理论知道实践,是理论结合实践的典范之作

  • Delphi面向对象编程思想PDF带书签版(part4/4)

    当时传这个资源的时候,最后关头,该死的CSDN老是报错,传了四五遍还不行。现在把最后一部分传上来,给大家带来不便,抱歉了。

  • 李維新書--面向对象实践之路(Delphi版)--導讀篇 <img src="/ima

    李維又出新書了介紹引用如下:本书主要介绍了利用主流开发方法学和技术技巧进行面向对象开发的原则与实践,通过完整剖析一个实际应用程序的设计、开发与实现,深入浅出地阐述OOD(面向对象开发)、OOP(面向对象程序设计)、TDD(测试驱动开发)、UT(单元测试)等开发方法学与最佳实践的应用与技术技巧,全面展现深厚技术实践经验的精髓。全书内容连贯、一气呵成,以实践阐述理论,以理论知道实践,是理论结合实践的典范之作。

  • 将面向对象的思想贯穿始终--谈Delphi开发(第一篇)

              国内有许多人将Delphi作为首选的开发工具。其原因当然是因为Delphi给开发者提供了诸多特性:面向对象的开发,可视化界面设计,组件丰富,多平台的可移植性(Delphi6的新特性)。         可是对于初学者来说,面向对象的思想可能并不是Delphi给其带来的最大的感受。而可视化的界面设计,丰富多样的可用组件反而给其留下最深刻难忘的印象。由此带来的严

  • 《Delphi面向对象编程思想》前言

            Delphi面向对象编程思想   刘 艺 著前  言   第一次知道Delphi并不是因为Borland公司的Delphi软件,而是在柏拉图的经典著作《柏拉图对话录》“申辩篇”中读到了这个单词。A friend of mine . . . went to Delphi and boldly asked the or

  • 证书生成器:使用JavaScript生成PDF证书

    证书生成者 使用JavaScript生成PDF证书 该应用程序使用两个库PDF-lib.js和FileSaver.js 证书样本

  • JavaScript代码生成PDF文件的方法

    可以使用javascript生成PDF的类库–jsPDF,先下载jsPDF-0.9.0rc2下载地址:;请点这里 ,以下是完整实例代码: &lt;!doctype&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;jsPDF&lt;/title&gt; &lt;meta ...

  • pdf:使用Vue模板和Prince生成动态PDF

    @ MomsFriendlyDevCo / PDF 使用Vue模板和Prince生成动态PDF。 使用进行模板制作以允许完整的Vue模板制作使用渲染PDF以避免操纵up的疯狂// Standalone generator( new PDF ( ) ). templatePath ( './test/data/...

  • 使用 JavaScript 和 WASM (WebAssembly) 生成 PDF 文件

    WASM-PDF使用 JavaScript 和 WASM (WebAssembly) 在浏览器中直接生成 PDF 文件。这里的想法是将创建 PDF 所涉及的所有工作都推送到浏览器端,而不是使用宝贵的服务器资源。演示从 JSON 文件生成示例 PDF 文档的示例...

  • generate-pdf:使用jsPDF和ReactJS使用javascript生成PDF

    使用jsPDF和ReactJS用Javascript生成PDF 要安装node_modules: yarn ; 运行: yarn start ; 重要代码: src/App.js ; 帮助:

  • Delphi-string转pbyte的方法——Move函数!

    var    s:string;    ps:Pchar;    b:pbyte;    len:integer; begin    s:=edit1.Text; //字符串    ps:=pchar(s); //转成pchar类型,    len:=length(s);//取字符串长度,占用多少字节    getmem(b,len);//申请内存,pchar,pbyte在使用前

  • jsPDF 是一个使用Javascript语言生成PDF的开源库.zip

    jsPDF 是一个使用Javascript语言生成PDF的开源库 ,jsPDF 是一个使用Javascript语言生成PDF的开源库。你可以在Firefox插件,服务端...

  • Certificate-Generator:#使用javascript的pdf证书生成器

    使用js的生成器证书 certificategenerator.herokuapp.com 用 证书 该Web应用程序正在使用PDF-lib.js或FileServer.js

  • WASM-PDF –使用JavaScript和WASM(WebAssembly)生成PDF文件-Rust开发

    WASM-PDF使用JavaScript和WASM(WebAssembly)在浏览器中直接生成PDF文件。 这里的想法是推动创建WASM-PDF所涉及的所有工作。使用JavaScript和WASM(WebAssembly)直接在浏览器中生成PDF文件。 这里的想法是将创建...

  • jsPDF-AutoTable:jsPDF插件,用于使用JavaScript生成PDF表

    用Javascript生成PDF表 这个jsPDF插件增加了通过解析HTML表或直接使用Javascript数据生成PDF表的功能。 查看或。 安装 通过执行以下操作之一来获取jsPDF和此插件: npm install jspdf jspdf-autotable 从github...

  • 内卷时代下的前端技术-使用JavaScript在浏览器中生成PDF文档

    另外,对于原生的PDF文件来说,仅包含英文字体,不包含任何中文字体,因此当导出的内容中含有中文字体编码时,就会显示乱码,所以通常情况下,我们都需要为PDF进行字体注册操作。当然也会有一定的缺点,对于字体较多...

  • pdfkit:用于Node和浏览器JavaScript PDF生成库

    用于Node和浏览器JavaScript PDF生成库。 描述 PDFKit是用于Node和浏览器的PDF文档生成库,可轻松创建复杂的多页可打印文档。 该API包含可链接性,并且包括低级功能以及用于高级功能的抽象。 PDFKit API设计得很简单...

  • SpringBoot集成itextpdf动态生成pdf并展示

    接上文SpringBoot集成markdown实现文档管理,对于表格的支持markdown不是特别友好,同时内部文档管理需要增加表格式api接口文档的功能,所以决定采用结合数据库存储与动态生成pdf借助目录结构展示的方式 表结构设计 ...

  • PDF生成工具(Javascript)

    Javascript tool which can generate PDF file.

Global site tag (gtag.js) - Google Analytics