小编Sur*_*ati的帖子

如何使用Java中的wkhtmlpdf将HTML文件转换为PDF

我想使用HTML文件转换为PDF文件wkhtmltopdf.wkhtmltopdf对我来说是最好的选择,因为它使用WebKit呈现HTML文件.问题是我想使用Java做同样的事情但wkhtmltopdf不提供任何Java API.

我可以使用Runtime.exec()ProcessBuilder从Java派生一个新进程,并wkhtmtopdf在该进程中使用它创建PDF输出.但是,当我开发基于Web的应用程序时,我不允许在服务器中创建这么多新进程.

有什么其他办法让我可以使用wkhtmltopdf吗?我真的想用它,因为它给了我确切的输出.

或者,是否有任何其他开源浏览器引擎提供可以呈现我的HTML页面的Java API wkhtmltopdf

java api wkhtmltopdf

9
推荐指数
2
解决办法
6116
查看次数

了解 C 中的内存对齐约束和填充字节

我有以下代码片段。

#include<stdio.h>
int main(){
    typedef struct{
        int a;
        int b;
        int c;
        char ch1;
        int d;
    } str;
    printf("Size: %d \n",sizeof(str));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出如下

Size: 20
Run Code Online (Sandbox Code Playgroud)

我知道 的大小structure大于 的组件大小的总和,structure因为添加了填充以满足内存对齐约束。我想知道如何决定必须添加多少字节的填充。它取决于什么?它取决于 CPU 架构吗?它也取决于编译器吗?我在这里使用 64 位 CPU 和gcc编译器。如果这些参数发生变化,输出将如何变化。

我知道 StackOverflow 上也有类似的问题,但他们没有彻底解释这种内存对齐约束。

c struct sizeof padding

4
推荐指数
1
解决办法
740
查看次数

使用 C++ 查找端口是否可以在 Linux 中使用

我正在开发一个 C++ 项目。为了满足其中一项要求,我需要随时检查端口是否可在我的应用程序中使用。为了实现这一点,我提出了以下解决方案。

#include <iostream>
#include <cstdlib>
#include <stdexcept>
#include <string>
#include <stdio.h>


std::string _executeShellCommand(std::string command) {
    char buffer[256];
    std::string result = "";
    const char * cmd = command.c_str();
    FILE* pipe = popen(cmd, "r");
    if (!pipe) throw std::runtime_error("popen() failed!");

    try {
        while (!feof(pipe)) 
            if (fgets(buffer, 128, pipe) != NULL)
                result += buffer;
    } catch (...) {
        pclose(pipe);
        throw;
    }
    pclose(pipe);
    return result;
}

bool _isAvailablePort(unsigned short usPort){
    char shellCommand[256], pcPort[6];
    sprintf(shellCommand, "netstat -lntu | awk '{print $4}' | grep ':' …
Run Code Online (Sandbox Code Playgroud)

c++ linux port netstat

3
推荐指数
1
解决办法
3355
查看次数

在Application崩溃时,QSharedMemory没有被删除

我正在使用Qt C++我用于QSharedMemory限制应用程序的多个实例的位置来实现应用程序.相关代码段main.cpp如下,

QSharedMemory sharedMemory;
sharedMemory.setKey(SM_INSTANCE_KEY);

if (!sharedMemory.create(1))
{
    QMessageBox::warning(0, "Console", "An instance of this application is already running!" );
    exit(0); /* Exit, already a process is running */
}
Run Code Online (Sandbox Code Playgroud)

在打开应用程序时,我可以看到已为我的应用程序创建了共享内存.(shmid7045192,1B size)

在此输入图像描述

到现在为止还挺好.当我的应用程序由于某种原因崩溃时出现问题.在崩溃时,sharedMemory没有被清除,因此我无法再打开该应用程序.当它崩溃时,附加的应用程序计数变为0,但共享内存不会被删除.相关的屏幕截图如下

在此输入图像描述

根据我的理解,由于共享内存的状态没有dest像其他共享内存那样标记,即使没有任何附加进程也不会被删除.

所以,我的问题是,有没有办法将共享内存的状态标记为dest

c++ qt shared-memory qsharedmemory

2
推荐指数
1
解决办法
1100
查看次数

设备驱动程序Hello world的make文件出错

我有简单的代码与设备驱动程序hello world with make file.it在12.04 LTS的情况下执行得很好但最近我将我的ubuntu升级到14.04之后,相同的程序无法编译.有错误消息

make

make -C /lib/modules/3.13.0-45-generic/build M= modules
make[1]: Entering directory `/usr/src/linux-headers-3.13.0-45-generic'
make[2]: *** No rule to make target `/usr/src/linux-headers-3.13.0-45-generic/arch/x86/syscalls/syscall_32.tbl', needed by `arch/x86/syscalls/../include/generated/uapi/asm/unistd_32.h'.  Stop.
make[1]: *** [archheaders] Error 2
make[1]: Leaving directory `/usr/src/linux-headers-3.13.0-45-generic'
make: *** [all] Error 2
Run Code Online (Sandbox Code Playgroud)

提前致谢......

c linux makefile linux-device-driver linux-kernel

1
推荐指数
1
解决办法
1859
查看次数