![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
|
Abrir pdf con builder
Hola, quiero abrir un pdf mediante codigo y no se ni por donde empezar, me puede alguien hechar una mano ??
Gracias |
|
#2
|
||||
|
||||
|
Código PHP:
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal Última edición por Casimiro Noteví fecha: 14-11-2024 a las 19:23:04. |
|
#3
|
||||
|
||||
|
Si te refieres con abrir un archivo PDF para que el usuario lo vea, puedes hacer lo que dijo Casimiro, si no. Se mas especifico con tu pregunta
|
|
#4
|
||||
|
||||
|
Añado que ShellExecute tal y como lo ha puesto [Casimiro] abrirá el PDF con el programa que tengas asignado por defecto a ese tipo de documentos, el resultado será el mismo que si pulsas doble click sobre el documento desde el Explorador de archivos de Windows.
Si deseas abrirlo con otro programa (Visor de PDF, Edge, Firefox,...) también se puede hacer, pero deberás especificarlo en la llamada.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
|
#5
|
|||
|
|||
|
Si estás haciendo una aplicación VCL (lo más común en C++ Builder), podés usar un TOleContainer para incrustar Acrobat Reader dentro del formulario (sí, como un objeto embebido de Office).
Pasos: Agregá un TOleContainer al formulario. código para cargar el PDF: Código:
OleContainer1->CreateObjectFromFile("C:\\ruta\\a\\archivo.pdf", false);
OleContainer1->DoVerb(ovShow);
Si el usuario no tiene visor PDF instalado, esto puede fallar. Componentes de terceros (profesionales) Hay librerías que cargan y renderizan PDFs sin necesidad de Adobe. Algunas opciones: Debenu Quick PDF Library (muy potente) WPViewPDF de WPCubed Gnostice PDFtoolkit PDFium (open source, pero más complejo de integrar en C++ Builder) Algunos son pagos, pero tienen versiones de prueba o gratuitas limitadas. ¿Qué necesitas para usar PDFium en C++ Builder? 1. Descargar PDFium ya compilado Podés bajar una versión precompilada aquí: https://github.com/bblanchon/pdfium-binaries Buscá la versión Windows x86 (32 bits) o x64, dependiendo de tu app. Necesitarás al menos estos archivos: pdfium.dll fpdfview.dll.lib (opcional, si vas a hacer linking estático, pero puedes ignorar esto si usás LoadLibrary) fpdfview.h (cabecera principal) 2. Crear el wrapper en C++ Builder Primero necesitás cargar dinámicamente la DLL y mapear las funciones que vas a usar. Cabecera: pdfium_wrapper.h Código:
#ifndef PDFIUM_WRAPPER_H
#define PDFIUM_WRAPPER_H
#include <windows.h>
#include <fpdfview.h>
class PDFiumWrapper {
private:
HMODULE hPdfium;
bool loaded;
public:
PDFiumWrapper() : hPdfium(NULL), loaded(false) {}
bool LoadPDFium(const String& dllPath) {
hPdfium = LoadLibrary(dllPath.c_str());
if (!hPdfium)
return false;
FPDF_InitLibrary();
loaded = true;
return true;
}
void UnloadPDFium() {
if (loaded) {
FPDF_DestroyLibrary();
FreeLibrary(hPdfium);
loaded = false;
}
}
// Simple test: cargar documento
FPDF_DOCUMENT LoadPDF(const String& filePath) {
return FPDF_LoadDocument(filePath.c_str(), NULL);
}
~PDFiumWrapper() {
UnloadPDFium();
}
};
#endif
Código:
#include "pdfium_wrapper.h"
PDFiumWrapper* pdfium;
void __fastcall TForm1::FormCreate(TObject *Sender) {
pdfium = new PDFiumWrapper();
if (!pdfium->LoadPDFium("pdfium.dll")) {
ShowMessage("Error cargando PDFium");
return;
}
FPDF_DOCUMENT doc = pdfium->LoadPDF("ejemplo.pdf");
if (!doc) {
ShowMessage("No se pudo abrir el PDF.");
} else {
ShowMessage("PDF cargado correctamente.");
FPDF_CloseDocument(doc);
}
}
void __fastcall TForm1::FormDestroy(TObject *Sender) {
delete pdfium;
}
No renderiza automáticamente en un TImage. Tendrías que usar FPDF_RenderPageBitmap y dibujar en un HBITMAP o TBitmap. Necesitás tener pdfium.dll junto al ejecutable. Vamos a mostrar la primera página de un PDF en un TImage en C++ Builder, usando PDFium. ¿Qué necesitamos? pdfium.dll en la misma carpeta que el .exe. Cabecera fpdfview.h (ya incluida en el paso anterior). Un TImage en tu Form. PDFium cargado como en la clase PDFiumWrapper. ✨ Paso a paso para renderizar la primera página en un TImage 1. Agrega estos includes: Código:
#include <fpdfview.h> #include <fpdf_doc.h> #include <fpdf_text.h> #include <fpdf_dataavail.h> #include <fpdf_formfill.h> #include <fpdf_save.h> #include <fpdfedit.h> Código:
void RenderPageToImage(FPDF_DOCUMENT doc, int pageIndex, TImage* image) {
FPDF_PAGE page = FPDF_LoadPage(doc, pageIndex);
if (!page) {
ShowMessage("No se pudo cargar la página.");
return;
}
int width = (int)FPDF_GetPageWidth(page);
int height = (int)FPDF_GetPageHeight(page);
// Ajustar tamaño del componente TImage
image->Width = width;
image->Height = height;
image->Picture->Bitmap->SetSize(width, height);
// Crear bitmap compatible con PDFium
FPDF_BITMAP bitmap = FPDFBitmap_Create(width, height, 0); // 0 = sin alpha
FPDFBitmap_FillRect(bitmap, 0, 0, width, height, 0xFFFFFFFF); // blanco
// Renderizar página al bitmap
FPDF_RenderPageBitmap(bitmap, page, 0, 0, width, height, 0, 0);
// Obtener buffer del bitmap
void* buffer = FPDFBitmap_GetBuffer(bitmap);
int stride = FPDFBitmap_GetStride(bitmap);
// Copiarlo a un TBitmap
Bitmap->PixelFormat = pf32bit;
for (int y = 0; y < height; ++y) {
void* dest = image->Picture->Bitmap->ScanLine[y];
void* src = (BYTE*)buffer + y * stride;
memcpy(dest, src, width * 4);
}
FPDFBitmap_Destroy(bitmap);
FPDF_ClosePage(page);
}
Código:
void __fastcall TForm1::Button1Click(TObject *Sender) {
PDFiumWrapper* pdfium = new PDFiumWrapper();
if (!pdfium->LoadPDFium("pdfium.dll")) {
ShowMessage("No se pudo cargar PDFium");
return;
}
FPDF_DOCUMENT doc = pdfium->LoadPDF("ejemplo.pdf");
if (!doc) {
ShowMessage("No se pudo abrir el PDF");
return;
}
RenderPageToImage(doc, 0, Image1); // Página 0 en el TImage1
FPDF_CloseDocument(doc);
pdfium->UnloadPDFium();
delete pdfium;
}
Última edición por navbuoy fecha: 15-05-2025 a las 13:17:54. |
|
#6
|
||||
|
||||
|
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
![]() |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Abrir fichero txt con c++builder y siempre EAccessViolation | joeyjr | C++ Builder | 4 | 09-12-2016 20:14:10 |
| Abrir simultáneamente dos formularios Builder c++ | fabiodidone | C++ Builder | 15 | 01-10-2016 21:45:29 |
| No se pudo abrir la Tabla: Report Builder | elvymena | Impresión | 0 | 28-12-2010 19:41:37 |
| Abrir directorio C++ Builder...? | Ðαяισš | C++ Builder | 9 | 25-01-2009 18:36:02 |
| Como abrir y modificar un archivo de Excel en builder | pollo_c | C++ Builder | 0 | 17-08-2007 16:07:27 |
|