Text -> PDF
2 отговора
146 прегледа
Text -> PDF
Nqkoi znae li nqkoi dobyr primer na VC za konvertirane na tekstow dokument w PDF? W Codeproject ima edin ama e za .NET i ne bachka na wsichkoto otgore.
Re: Text -> PDF
Ами Acrobat Distiller... Може също и Acrobat PDFWriter. Май са писани на VC 

Re: Text -> PDF
Razgledai [линк], drug variant e da oburnesh wnimanie na cygwin.com i packetite za pdf - tam trjabwa da ima i sorsove...
no eto edin prost primer za Text to PDF convert ot PlanetPDF:
[линк]
(wuzmozhno e da ima problemi poradi interpretatziata na [ i ])
To err is human
To stderr is inhuman
no eto edin prost primer za Text to PDF convert ot PlanetPDF:
[линк]
(wuzmozhno e da ima problemi poradi interpretatziata na [ i ])
/*
Copyright 1998
P. G. Womack, Diss, Norfolk, UK.
"BugBear"
Do what you like, but don't claim you wrote it.
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
float page_width = 594.0;
float page_depth = 828.0;
float margin = 30.0;
float font_size = 10.0;
float lead_size = 10.0;
int object_id = 1;
int page_tree_id;
typedef struct _PageList {
struct _PageList *next;
int page_id;
} PageList;
int num_pages = 0;
PageList *pages = NULL;
PageList **insert_page = &pages;
store_page(int id)
{
PageList *n = (PageList *)malloc(sizeof(*n));
if(n == NULL)
{
fprintf(stderr,
"Unable to allocate array for page %d.", num_pages + 1);
exit(1);
}
n->next = NULL;
n->page_id = id;
*insert_page = n;
insert_page = &n->next;
num_pages++;
}
int num_xrefs = 0;
long *xrefs = NULL;
start_object(int id)
{
if(id >= num_xrefs)
{
long *new_xrefs;
int delta, new_num_xrefs;
delta = num_xrefs / 5;
if(delta < 1000)
delta += 1000;
new_num_xrefs = num_xrefs + delta;
new_xrefs = (long *)malloc(new_num_xrefs * sizeof(*new_xrefs));
if(new_xrefs == NULL)
{
fprintf(stderr,
"Unable to allocate array for object %d.", id);
exit(1);
}
memcpy(new_xrefs, xrefs, num_xrefs * sizeof(*xrefs));
free(xrefs);
xrefs = new_xrefs;
num_xrefs = new_num_xrefs;
}
xrefs[id] = ftell(stdout);
printf("%d 0 obj\n", id);
}
int stream_id, stream_len_id;
long stream_start;
float ypos;
start_page()
{
stream_id = object_id++;
stream_len_id = object_id++;
start_object(stream_id);
printf("<< /Length %d 0 R >>\n", stream_len_id);
printf("stream\n");
stream_start = ftell(stdout);
printf("BT\n/F0 %g Tf\n", font_size);
ypos = page_depth - margin;
printf("%g %g Td\n", margin, ypos);
printf("%g TL\n", lead_size);
}
end_page()
{
long stream_len;
int page_id = object_id++;
store_page(page_id);
printf("ET\n");
stream_len = ftell(stdout) - stream_start;
printf("endstream\nendobj\n");
start_object(stream_len_id);
printf("%ld\nendobj\n", stream_len);
start_object(page_id);
printf("<>\nendobj\n", page_tree_id, stream_id);
}
do_text()
{
char buffer[8192];
start_page();
while(gets(buffer) != NULL)
{
if(ypos < margin)
{
end_page();
start_page();
}
if(strlen(buffer) == 0)
printf("T*\n");
else
{
if(buffer[0] == '\f')
{
end_page();
start_page();
}
else
{
char c, *s = buffer;
putchar('(');
while((c = *s++) != '\0')
{
switch(c)
{
case '(':
case ')':
case '\\':
putchar('\\');
}
putchar(c);
}
printf(")'\n");
}
}
ypos -= lead_size;
}
end_page();
}
int main(int argc, char **argv)
{
int i, catalog_id, font_id;
long start_xref;
printf("%%PDF-1.0\n");
page_tree_id = object_id++;
do_text();
font_id = object_id++;
start_object(font_id);
printf("<>\nendobj\n");
start_object(page_tree_id);
printf("<, num_pages);
{
PageList *ptr = pages;
printf("/Kids[\n");
while(ptr != NULL)
{
printf("%d 0 R\n", ptr->page_id);
ptr = ptr->next;
}
printf("]\n");
}
printf("/Resources<> >>\n", font_id);
printf("/MediaBox [ 0 0 %g %g ]\n", page_width, page_depth);
printf(">>\nendobj\n");
catalog_id = object_id++;
start_object(catalog_id);
printf("<>\nendobj\n", page_tree_id);
start_xref = ftell(stdout);
printf("xref\n");
printf("0 %d\n", object_id);
printf("0000000000 65535 f \n");
for(i = 1; i < object_id; i++)
printf("%010ld 00000 n \n", xrefs);
printf("trailer\n<<\n/Size %d\n/Root %d 0 R\n>>\n", object_id, catalog_id);
printf("startxref\n%ld\n%%%%EOF\n", start_xref);
exit(0);
return 0;
}
To err is human
To stderr is inhuman