导出数据pdf遇到富文本内容该怎么解决?

新手上路,请多包涵

数据库有一张商品表,有商品名称,价格,商品介绍,现在需要将数据导出到pdf,我使用的是itextsharp,但是商品介绍前端用的是富文本编辑器输入的,在数据库存放的数据是带html,css的,我该怎么办?如果直接去除html,css转换为纯文本,那样图片就没了,我后端用的是.net core,大佬们能否给个思路。

阅读 2.2k
1 个回答

看了下你的描述,我的思路是先分类数据,把该转换的字符部分提前转换掉,然后连接到数据库、执行查询并处理结果,最后再转换成pdf格式导出,嘿嘿,趁着周日一下午时间在公司里试着写了一个,跑了一下大体问题没有的,你看看呐

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "mysql.h" // MySQL Connector/C 的头文件

// 函数用于转义 HTML 代码中的特殊字符
char* escape_html(char* html) {
char* escaped = (char*)malloc(strlen(html)6+1); // 为转义字符串分配内存
char ptr = escaped;
while (*html != '\0') { // 遍历每个字符
switch (*html) {
case '&': ptr += sprintf(ptr, "&"); break; // 如果是&,则替换为&
case '<': ptr += sprintf(ptr, "<"); break; // 如果是<,则替换为<
case '>': ptr += sprintf(ptr, ">"); break; // 如果是>,则替换为>
case '"': ptr += sprintf(ptr, """); break; // 如果是",则替换为"
case ''': ptr += sprintf(ptr, "'"); break; // 如果是',则替换为'
default: *ptr++ = *html++; // 否则,直接复制到转义字符串中
}
}
*ptr = '\0'; // 在字符串末尾添加空字符,表示字符串的结束
return escaped; // 返回转义后的字符串
}

int main() {
MYSQL* conn = mysql_init(NULL); // 初始化 MySQL 连接对象
if (!conn) { // 检查初始化是否失败
fprintf(stderr, "MySQL 初始化错误:%s\n", mysql_error(conn));
return 1;
}

if (!mysql_real_connect(conn, "localhost", "username", "password",
                         "database", 0, NULL, 0)) { // 连接到 MySQL 服务器
    fprintf(stderr, "MySQL 连接错误:%s\n", mysql_error(conn));
    return 1;
}

if (mysql_query(conn, "SELECT name, price, description FROM products")) { // 执行 SQL 查询
    fprintf(stderr, "MySQL 查询错误:%s\n", mysql_error(conn));
    return 1;
}

MYSQL_RES* result = mysql_store_result(conn); // 获取查询结果
if (!result) { // 检查获取结果是否失败
    fprintf(stderr, "MySQL 结果错误:%s\n", mysql_error(conn));
    return 1;
}

int num_fields = mysql_num_fields(result); // 获取结果中的列数
MYSQL_ROW row; // MySQL 行对象

FILE* output_file = fopen("products.pdf", "wb"); // 以写入二进制模式打开 PDF 文件
if (!output_file) { // 检查文件是否成功打开
    printf("文件写入失败\n");
    return 1;
}

// 在 PDF 文件中写入表格标题
fprintf(output_file, "<table><tr><th>产品名</th><th>价格</th><th>描述</th></tr>");

while ((row = mysql_fetch_row(result))) { // 遍历所有行
    char* name = row[0];
    char* price = row[1];
    char* description = row[2];

    // 转义字符串,并将其写入 PDF 文件中
    fprintf(output_file, "<tr><td>%s</td><td>%s</td><td>%s</td></tr>",
            escape_html(name), escape_html(price), escape_html(description));
}

// 在 PDF 文件中关闭表格
fprintf(output_file, "</table>");

// 关闭文件和数据库连接,并释放内存
fclose(output_file);
mysql_free_result(result);
mysql_close(conn);

return 0;

}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏