阅读更多

16顶
0踩

Web前端

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

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

 

 

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面向对象编程思想PDF带书签版(part4/4)

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

  • Delphi面向对象程序设计课件1-13章打包(含源代码).zip

    资料目录.bat 源代码 第一章Delphi基础知识 第七章异常处理和程序调试技术 第三章Delphi面向对象编程思想 第九章对话框 第二章Delphi语法基础 第五章VCL组件应用 第八章VCL组件应用续2 第六章VCL组件应用续1 第十一章文件操作和管理 第十三章数据库编程 第十二章图形图像和多媒体技术 第十章菜单和工具栏 第四章Delphi基本组件编程1

  • Delphi面向对象编程思想刘艺(PDF)

    Delphi面向对象编程思想刘艺(PDF) 资源很好 很适合学习

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

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

  • Delphi面向对象程序设计课件 第三章Delphi面向对象编程思想.ppt

    Delphi面向对象程序设计课件

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

      borland资深专家李维的经典作品,全面介绍了利用主流开发方法学和技术技巧进行面向对象开发的原则与实践,全面展现了作者深厚技术实践经验的精髓。   本书主要介绍了利用主流开发方法学和技术技巧进行面向对象开发的原则与实践,通过完整剖析一个实际应用程序的设计、开发与实现,深入浅出地阐述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

  • 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在使用前

  • 证书生成器:使用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面向对象程序设计课件 第二章Delphi语法基础.ppt

    Delphi面向对象程序设计课件

  • TMQTTClient-delphi.rar_MQTT delphi_TMQTTClient-delphi_delphi ssl

    delphi mqtt通讯。没有用到第三方的控件。可以在delphi7编译通过。

  • delphi高手突破学习笔记之面向对象类和对象的本质

    知识点1:堆和栈 每个应用程序可以获得的内存空间分为两种:堆(heap)和栈(stack)。 堆又称为“自由存储区”,其中的内存空间的分配与释放是必须由程序员来控制的。例如,用GetMem函数获取了一定大小的内存空间,则在使用完后,必须调用FreeMem函数将空间释放,否则就会发生所谓的“内存泄漏”。“借债还钱,天经地义”。 栈又称为“自动存储区”,其中的内存空间的分配与释放是由编译器和系统

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

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

Global site tag (gtag.js) - Google Analytics