PDF Dosyalarını Okuma ve Yazma için Ücretsiz C++ PDF Kütüphanesi
Basit bir Açık Kaynak C tabanlı PDF Kütüphanesi, PDF Belgelerini Okuma, Yazma ve Manipüle Etme imkanı sağlar. Görüntüyü PDF'ye Dönüştürme, İçerik Çıkarma, Akış Tabanlı PDF Okuma ve daha fazlasını C uygulamaları içinde destekler.
PDFio Kütüphanesi Nedir?
PDFio, PDF dosyalarını okuma ve yazma işlemleri için özellikle tasarlanmış, hafif, açık kaynaklı bir C kütüphanesidir; renderleme veya görüntüleme karmaşıklığı olmadan. Michael R Sweet tarafından oluşturulmuş ve Apache License Version 2.0 altında lisanslanmıştır; bu kütüphane geliştiricilere içerik oluşturma, çıkarma ve dönüştürmeye odaklanan, görsel sunumdan ziyade PDF manipülasyonu için basit bir yaklaşım sunar. Kütüphane çok kolay kullanılabilir ve PDF sayfa çıkarma ve birleştirme, veritabanlarından otomatik raporlar, filigran ve damga ekleme, sertifika ve diploma oluşturma, arşivleme için font gömme, meta veri değiştirme ve daha fazlası gibi PDF dosyalarını işlemek için çeşitli yollar sağlar.
PDFio, temel G/Ç işlemlerine odaklanır ve PDF'lerden veri çıkarmak veya daha karmaşık kütüphanelerin ek yükü olmadan yeni PDF'ler oluşturmak isteyen uygulamalar için mükemmeldir. Kütüphane güçlü dönüşüm özelliklerini destekler ve yazılım geliştiricilerin markdown'ı PDF'ye, görüntüyü PDF'ye, HTML'yi PDF'ye dönüştürmelerine ve C uygulamaları içinde PDF'lerde barkod üretmelerine olanak tanır. Görselleştirme yükü olmadan çekirdek işlevselliğe odaklanması, PDF oluşturma veya işleme görsel gösterim gerektirmeyen sunucu tarafı uygulamaları, komut satırı araçları ve gömülü sistemler için ideal kılar. Belge yönetim sistemleri oluşturuyor, otomatik rapor üreteçleri geliştiriyor ya da PDF analizi için araçlar geliştiriyor olun, PDFio C uygulamalarında profesyonel PDF işleme için gerekli temel işlevselliği sunar.
PDFio'ya Başlarken
PDFio'yu kurmanın önerilen yolu NuGet kullanmaktır. Sorunsuz bir kurulum için lütfen aşağıdaki komutu kullanın.
PDFio'yu NuGet ile Kurun
Install-Package pdfio_native PDFio'yu GitHub üzerinden Kurun
git clone https://github.com/michaelrsweet/pdfio.git
Ayrıca manuel olarak da kurabilirsiniz; en son sürüm dosyalarını doğrudan GitHub deposundan indirin.
C ile Sıfırdan PDF Oluşturma
Açık kaynak PDFio kütüphanesi, C uygulamaları içinde sıfırdan yeni PDF belgesi oluşturma için tam destek eklemiştir. Yeni bir PDF belgesi oluşturmak da aynı derecede basittir ve sadece birkaç satır C kodu ile yazılım geliştiricileri yeni sayfalar ekleyebilir, metin ve basit şekiller çizebilir, görüntüler (JPEG, PNG formatları) ekleyebilir, renk ve dönüşümler uygulayabilir, tablolar ve yapılandırılmış düzenler oluşturabilir ve daha fazlasını yapabilir. İşte C kodu kullanarak özel sayfa boyutu ve içerikle yeni bir PDF belgesi oluşturmayı gösteren basit bir örnek.
C Kütüphanesi ile Özel Sayfa Boyutu ve İçerikli Basit Bir PDF Belgesi Nasıl Oluşturulur?
#include
#include
int main(void) {
pdfio_file_t *pdf;
pdfio_dict_t *dict;
pdfio_stream_t *page;
pdfio_obj_t *font;
pdfio_rect_t media_box = {0.0, 0.0, 612.0, 792.0}; // US Letter
pdfio_rect_t crop_box = {36.0, 36.0, 576.0, 756.0}; // 0.5\" margins
// Create PDF file
pdf = pdfioFileCreate("output.pdf", "2.0",
&media_box, &crop_box,
NULL, NULL);
if (!pdf) {
fprintf(stderr, "Unable to create PDF\n");
return 1;
}
// Create a font object (Helvetica)
font = pdfioFileCreateFontObjFromBase(pdf, "Helvetica");
// Create page dictionary
dict = pdfioDictCreate(pdf);
pdfioPageDictAddFont(dict, "F1", font);
// Create the page
page = pdfioFileCreatePage(pdf, dict);
// Draw text
pdfioContentSetFillColorDeviceGray(page, 0.0); // Black color
pdfioContentTextBegin(page);
pdfioContentSetTextFont(page, "F1", 24.0);
pdfioContentTextMoveTo(page, 100.0, 700.0);
pdfioContentTextShow(page, false, "Hello, PDFio!");
pdfioContentTextEnd(page);
// Close page and file
pdfioStreamClose(page);
pdfioFileClose(pdf);
printf("PDF created successfully!\n");
return 0;
}
C Kütüphanesi ile Görüntüyü PDF'ye Dönüştürme
Görüntüleri PDF formatına dönüştürmek, en yaygın belge işleme görevlerinden biridir. PDFio kütüphanesi, sayfa boyutlandırma, görüntü yerleştirme, ölçekleme ve meta veriler üzerinde ince kontrol sağlayarak bunu basitleştirir. Yazılım geliştiricileri, tek görüntüleri ve toplu dönüşümleri işleyebilen tam bir görüntüden PDF'ye dönüştürücü oluşturabilir. Aşağıdaki örnek, geliştiricilerin C uygulamaları içinde bir görüntüyü PDF'ye nasıl dönüştürebileceğini göstermektedir.
C Kütüphanesi ile Tek Görüntüyü PDF'ye Nasıl Dönüştürülür?
#include
#include
#include
bool create_pdf_from_image(const char *image_path,
const char *pdf_path,
const char *title) {
pdfio_file_t *pdf;
pdfio_obj_t *image;
pdfio_dict_t *page_dict;
pdfio_stream_t *page_stream;
pdfio_rect_t media_box;
double img_width, img_height;
double page_width, page_height;
double scale_x, scale_y, scale;
double x, y;
// Create the image object first to get dimensions
// We'll use a temporary PDF for this
pdfio_rect_t temp_box = {0, 0, 612, 792};
pdf = pdfioFileCreate(pdf_path, "2.0", &temp_box, NULL, NULL, NULL);
if (!pdf) {
fprintf(stderr, "Error: Cannot create PDF file\n");
return false;
}
// Set PDF metadata
if (title) {
pdfioFileSetTitle(pdf, title);
}
pdfioFileSetAuthor(pdf, "PDFio Image Converter");
pdfioFileSetCreator(pdf, "image2pdf v1.0");
// Load and embed the image
image = pdfioFileCreateImageObjFromFile(pdf, image_path, true);
if (!image) {
fprintf(stderr, "Error: Cannot load image file: %s\n", image_path);
pdfioFileClose(pdf);
return false;
}
// Get image dimensions in pixels
img_width = pdfioImageGetWidth(image);
img_height = pdfioImageGetHeight(image);
printf("Image dimensions: %.0f x %.0f pixels\n", img_width, img_height);
// Create page sized to image (assuming 72 DPI)
// This creates a PDF page that exactly fits the image
page_width = img_width;
page_height = img_height;
media_box.x1 = 0.0;
media_box.y1 = 0.0;
media_box.x2 = page_width;
media_box.y2 = page_height;
// Create page dictionary and add image resource
page_dict = pdfioDictCreate(pdf);
pdfioDictSetRect(page_dict, "MediaBox", &media_box);
pdfioPageDictAddImage(page_dict, "IM1", image);
// Create the page
page_stream = pdfioFileCreatePage(pdf, page_dict);
// Draw image at full size (no scaling)
pdfioContentDrawImage(page_stream, "IM1", 0, 0,
page_width, page_height);
// Close and save
pdfioStreamClose(page_stream);
pdfioFileClose(pdf);
printf("Successfully created PDF: %s\n", pdf_path);
return true;
}
int main(int argc, char *argv[]) {
if (argc < 3) {
fprintf(stderr, "Usage: %s [title]\n",
argv[0]);
return 1;
}
const char *title = (argc > 3) ? argv[3] : NULL;
if (!create_pdf_from_image(argv[1], argv[2], title)) {
return 1;
}
return 0;
}
C Kütüphanesi ile PDF Okuma ve Metin Çıkarma
En yaygın görevlerden biri, bir PDF dosyasından metin okuma ve çıkarma işlemidir. Açık kaynaklı PDFio kütüphanesi, geliştiricilerin sayfalar ve içerik akışları arasında dolaşmasına izin vererek bu süreci sezgisel hale getirir. Kütüphane, mevcut PDF'lerden basit metin, meta veriler, gömülü yazı tipleri, sayılar, görüntüler, üzümler, adlar ve daha fazlası gibi yararlı bilgileri çıkarmak için tam destek sağlar. Aşağıdaki örnek, mevcut bir PDF'yi açıp C kütüphanesini kullanarak temel bilgileri nasıl çıkaracağınızı gösterir.
C Kütüphanesi ile PDF Dosyasından Basit Metin Nasıl Çıkarılır?
#include
#include
#include
// Callback function to handle text objects
static bool text_cb(const pdfio_text_t *text, void *data) {
// Simply print the text to stdout
printf("%s", text->utf8);
return true;
}
int main(void) {
pdfio_file_t *pdf;
pdfio_page_t *page;
// Open the PDF file for reading
pdf = pdfioFileOpen("example.pdf", NULL, NULL, NULL);
if (!pdf) {
fprintf(stderr, "Failed to open example.pdf\n");
return 1;
}
printf("PDF has %d pages.\n", pdfioFileGetNumPages(pdf));
// Read the first page (pages are 1-indexed)
page = pdfioFileGetPage(pdf, 1);
if (!page) {
fprintf(stderr, "Failed to read page 1\n");
pdfioFileClose(pdf);
return 1;
}
// Parse the page content and call our text_cb for each text object
if (!pdfioPageParseContents(page, text_cb, NULL, NULL, NULL)) {
fprintf(stderr, "Failed to parse page contents\n");
}
// Clean up
pdfioFileClose(pdf);
return 0;
}
Verimli, Akış Tabanlı Okuma
PDFio verimlilik için tasarlanmıştır. Okuma sırasında, tüm dosyayı bir kerede belleğe yüklemez. Bunun yerine, dosyayı parçalar halinde işlemenizi sağlayan bir çekme-çözümleme yaklaşımı kullanır. Bu, sistem belleğini tüketmeden çok büyük PDF'leri işlemek için çok önemlidir. İlk örnekteki pdfioPageParseContents işlevi, bu akış tabanlı modelin mükemmel bir örneğidir. Sayfanın içerik akışını sıralı olarak okur ve ilerlerken olaylar (örneğin metin geri çağrısı) yayar.