jueves, 25 de agosto de 2016

Battlevoid: Harbinger - Tips para completar el juego

Objetivos

Hola amigos, en esta ocasión les daré algunos tips para pasar el juego Battlevoid: Harbinger (antes llamado Battlestation: Harbinger pero como dice en su cuenta de Twitter @BattlestationPC, por problemas legales se le debió cambiar el nombre). Lo compré para Android cuesta $2.900 (pesos Chilenos), unos 4.5 USD. Para PC lo encuentras en Steam a 9,99 €, unos 11 USD. Este juego es un Roguelike espacial con elementos de batalla y estrategia, muy adictivo y entretenido. Me ha tenido una y otra vea intentado pasarlo, aún no puedo pero estoy a punto. Al ser roguelike dejo en claro que es que si mueres, comienzas todo de nuevo, pero de igual forma ganas experiencia para desbloquear otras naves. Son mapas random, por lo que una partida nunca es igual a otra. Permite jugarlo offline.
Tiene una comunidad (en inglés) activa: http://bugbyte.fi/forums/forumdisplay.php?fid=10, así que les animo a que lo jueguen.

Parte con algo fácil

  • Empieza en fácil, con un mapa autogenerado pero limitado (presionando el dado de abajo a la izquierda), y no infinito.
  • Parte con una nave potente de las pocas que hay al comienzo. Ve las características de cada una (presionando en el triangulo de arriba a la derecha) y quédate con la mejor.

Dinero

  • Chatarra espacial o tuercas: reúne esa chatarra que parecen tuercas (o engranajes) para comprar módulos de naves o naves amigas, las tuercas son tu dinero. La obtienes al ganar batallas o completar misiones. Al eliminar una nave grande obtienes más que un pequeña, pero al completar una misión ganas mucho más.
  • Cubos: a veces recogerás cubos grises que son parte de alguna misión, no debes venderlos, sino llevarlos alguna estación que lo necesite, según los objetivos de dicha misión.
  • Materiales verdes: reúne estos ítems para hacerle upgrade a tus armas, drones o naves ayudantes.
  • Vende lo que no necesites: pero ojo que si lo vendes, obtienes una parte muy pequeña de lo que lo compras, así que úsalo como último recurso.
  • Vende equipo alien pero sólo si encuentras uno mejor: equipo alien se vende bien, pero primero úsalo ya que en general tiene mejoras. Véndelo sólo si encuentras uno mejor.
  • Vende tus armas sólo en caso muy necesario: por ejemplo quieres un cañón de largo alcance, y te faltan 150 tuercas, vende una de tus armas chicas ya que vale la pena, lo mismo para comprar un cañón nuclear.

Equipo

  • Al comienzo tienes 3 naves para seleccionar y cada uno con slots diferentes. Hay 3 tipos de slots:
    • Slot rojos: permite incorporar artillería de ataque como un cañón láser o cañón nuclear. Son los más útiles.
    • Slot azules (o calipso): armas de defensa, que son de menor calibre y rango como el bolter, que es el más barato.
    • Slot verdes: el hangar, donde puedes construir bolters, láser, reparar, naves no tripuladas o drones. Los bolters son los más baratos y más efectivos por el precio, o los drones son la mejor opción.
    • Naves extras: Existe una variedad con diferentes precios. Ve bien tu estrategia para decidirte por una nave cargador (carrie) o una de asalto ya que podrás actualizar estas naves luego. Puedes comprar hasta dos naves ayudantes, si te alcanzan las tuercas claro.
  • Las naves que compres vienen vacías: Si tienes suficientes tuercas y compras una nave, esta viene sin armas, así que no compres a menos que tengas unas 300 tuercas extras para comprar la nave más un arma básica.
  • Mejora tu equipo: cada equipo que compres tiene características para ser mejorado. Una buena idea es mejorar la característica de número de naves para el equipo Drones para poder sacar más drones y de forma rápida.
  • Bolter drones, baratos y eficientes: son la mejor opción para ahorrar, hasta que te alcance para un cañón de asalto. Con 3 bolter drones y un bolter de defensa puedes eliminar una nave grande, lo que te dará buen dinero. Si eres bueno, en poco tiempo puedes eliminar varias naves grandes y te alcanza para el cañón nuclear que es una de las mejores armas del juego.

Estación

  • Reparar es gratis: si estás en la misma pantalla de una Estación, basta tocar tu nave cuando esta dañada para que aparezca el ícono de reparar, si aceptas reparará gratis tu nave. En cambio, si estás en una pantalla donde no está la estación y no quieres volver a la zona de la Estación, te sale dinero reparar. Vuelve a la estación cada vez que puedas, dando saltos espaciales (si estás muy lejos de una, mira primero en el mapa que no hayan enemigos en el camino. Mira las flechas rojas como se mueven, indican la dirección donde se moverán de las naves enemigas)
  • La estación te defiende: una gran ventaja es que si naves enemigas te siguen acá, la estación tiene una muy buena defensa que te ayudará a defenderte. Un truco es atraer las naves enemigas a la Estación con el radar SOS que dejan los enemigos a veces, así las destruyes más rápido.
  • La estación vende buen equipo: la estación tiene un muy buen equipo para vender en general, sobretodo armas aliens poderosas. Con solo tocar la Estación sale el ícono de comprar (un ícono parecido a un carro de compra).

Mapa

  • Los símbolos azules son aliados: Las tuercas azules son Estaciones, las flechas azules naves o drones aliados.
  • Cuando saltes, escoge bien el cuadrante donde caerás: Al moverte a una nueva ubicación, puedes seleccionar en los 9 cuadros donde caerás, si arriba, al centro, abajo-derecha, etc. Ve bien ya que si hay muchos enemigos y no tienes poder de ataque, mejor ataca de lejos y eliges una posición lejana a ellos.
  • Los símbolos rojos son enemigos: algunos tienen forma de flecha, donde apunta la flecha es donde se están moviendo o donde se moverán, por lo que puedes ver por ejemplo si uno se te acercará en el siguiente turno.
  • Salta un turno a veces: en el mapa verás un ícono de un reloj de arena verde, si lo presionas pasará un turno. Es útil para cuando veas que algunas naves enemigas se mueven a lo lejos y quieres pasar por un área donde justo ellas acaban de dejar.
  • Usa la antena SOS: ese icono como radar que se ve en el mapa, a la izquierda del reloj, te la entregan los enemigos, y sirve para llamar la atención de los mismos (como que tu eres un enemigo y estás pidiendo apoyo) y si están a un turno de ti, lo más seguro vendrán a ayudar, y ahí es cuando es bueno para tenderles una emboscada. Sólo úsala cuando estés en una pantalla junto a la Estación, así llamas la atención de los enemigos, se acercarán y la Estación te dará un buen apoyo para destruirlas. Esta antena, solo atrae a cierto tipo de razas, no todas. En inglés a este ícono le llaman Distress Beacons.
  • Recoge tecnología alien verde: luego de terminar una batalla, aparecerá a veces un ícono de exclamación abajo, si lo tocas saldrá la tecnología alien que dejó alguna nave, esta la puedes equipar en tus slot azules o rojos. Muchas veces es la misma que tu ya tienes equipada, pero con mejores upgrades.

Naves

Las Naves jugables, son de dos tipos: Fighters (ataque) o Carriers (cargadores) y estas a la vez, son de dos tipos, cargadores livianos o de asalto:
  • Nightingale: nave tipo cargador y de asalto liviano, es la primera del juego que puedes usar.
  • Raven: nave de asalto, tiene un casco más duro.
  • Guardian: nave cargadora y de asalto liviano, es un poco mejor que Nightingale, pero más lenta, se desbloquea al nivel 4.
  • Zephyr: destructor, se desbloquea al nivel 4.
  • Hurricane – nave de asalto, se desbloquea al nivel 5.
  • Resolution – nave cargadora y de asalto grande, la nave más cara, se desbloquea al nivel 6.
  • Memphis – destructor, se desbloquea al nivel 7.
  • Avalon – nave cargadora y destructor liviano, se desbloquea al nivel 8.
  • Valhalla – nave cargador y destructora grande, se desbloquea al nivel 9.
  • Achilles – nave crucero, se desbloquea al nivel 10.
  • Liberator – nave cargador y crucero liviano, la nave con mejor escudo, se desbloquea al nivel 11.
  • Armada: la mejor, se desbloquea en el nivel 12.
Naves extras que te pueden ayudar:
  • Chimera – nave cargadora chica, una de las más rápidas, con un nivel de 24 de velocidad.
  • Genesis – nave exploradora y cargadora chica.
  • Viper – nave exploradora, la más rápida con los mejores propulsores.
  • Falcon – nave de asalto, tiene uno de los mejores cascos y velocidad.
  • Ravager – nave de asalto.
Define tu estrategia con las naves
  • Naves de asalto no tienen slot verdes: esto afecta a que por ejemplo el destructor Zephyr no podría llevar drones. Tiene varias ranuras para armas, y tres rojas para cañones de grueso calibre.
  • Usa dos light carrier (cargador liviano) con drones: una alternativa es tener una nave de asalto y a la vez naves extras cargadoras ya que es una forma económica de tener una pequeña escuadra, ya que los Drones Luchadores parten de las 250 tuercas, luego puedes mejorar y comprar Drones Bolter por 600 tuercas.
  • Usa una nave principal carrier con drones: otra alternativa es tener un cargador que tienen menos slots de armas pero tienen slot para drones.
  • Las naves ayudantes tienen espacio para ítems: si tienes items que no quieres vender, puedes dejarla en la sección azul de items de las naves ayudantes, así vez si te sirven en un futuro.
  • Mi escuadra favorita: Una BSE Zephyr que tiene tres slot rojos, lo equipo con dos Torrente de Partículas (4600 tuercas) y un Cañón Nuclear (2500 tuercas) y dos naves Nightingale con un dron de misiles, un Torrent de Partículas y un Cañón Nuclear.

Armas

  • Armas Celestial o armas aliens: ve bien los estatus de cada arma si tienes que decidir entre una y otra
  • Las Estaciones venden muy buenas armas: no olvidar que las armas de las estaciones están mejoradas.
  • Los bolter son los más baratos y efectivos.
  • Teleport es para cobardes: si estás a punto de morir y quieres huir, cómpralo, pero personalmente si muero, muero con mi nave y no como un cobarde jaj, además si mueres ganas experiencia para desbloquear mejores naves :P

Nunca te distraigas, y arranca a veces

  • Nunca, pero nunca te distraigas: Me pasó más de una vez, que por estar mirando la barra de salud de una de mis naves amigas, me atacaron la nave principal y morí. Esto luego de horas de juego :(
  • Si tu energía está al 25%, ¡corre!: No te las des de confiado, si ves el marco rojo de la pantalla, es que debes arrancar a un sitio seguro, ojalá a una Estación.

Anexo a los tips: Libro de ilustraciones

Fuera de los tips y estrategias, quería comentarles que me gustó mucho que el juego tiene una historia de fondo, de razas y conquistas. En el foro se puede leer de ella: http://bugbyte.fi/forums/forumdisplay.php?fid=7
También los fans hacen ilustraciones del universo del juego. Entre las más interesantes son las de las razas, colocaré aquí algunas traducciones:

Los Wanderers
Hemos viajado a través de las galaxias durante mucho tiempo. Nuestro planeta nos fue arrebatado por lo que hemos estado obligados a vivir en nuestras naves. Todos nos llaman Los Wanderers, nosotros nos hacemos llamar sobrevivientes. El tiempo nos ha dado fama de despiadados, y ya no vamos a esperar a ser atacados, sino que vamos a atacar primero. Una sombra infinita y eternamente creciente ha surgido en la vida, sin embargo, no vamos a ser los que se detienen a orar. Estamos aquí, queremos tus naves.

Los Trolgars
La historia trata de la esclavitud que ha pasado de generación en generación en este pueblo en el pasado. Los Trolgars quieren defender su planeta con más fuerza que nunca lo que les pertenece. Ahora son libres, y ahora también quieren reclamar más espacio para su pueblo. Nunca volverán a dejar que nadie se acerca a sus tesoros. Los Trolgars mezclan y combinan cada pieza de tecnología que encuentran y son buenos carroñeros en esa área. En las ciudades de los Trolgars el pasado está presente sólo en las chimeneas negras que se elevan a los cielos, y las historias que se cuentan sobre Haik-u, el Trolgar cuyos pies fueron atados con grilletes metálicos.

Las Schillae
Alguna vez fue una raza pacífica, pero ahora está en busca de la guerra, y lo cantan. La canción es sobre el amor, la traición y la esperanza, pero en su mayoría, trata de venganza. Estas mujeres, sirenas abominables, han sido traicionadas de una manera horrible. Les han arrebatado su amor y esperanza y las han empujado al infierno. Les quitaron los machos de su propia raza y rezan a los machos de otras razas, especialmente a los machos humanos. Ahora que quieren venganza, necesitan un plan. Ellas necesitan ayuda, y necesitan la tecnología. Por encima de todo, ellas tienen que saber quién les ha hecho esto. Hasta que sepan, ellas dudarán de todos.

Los Celestials
Estos seres de energía una vez que se unificaron en una sola luz madre. Esta luz fue infectada por la oscuridad, y necesitaba una manera de detener la pérdida de color por completo. Los hijos de la luz, unas diminutas esferas radiantes, vagaron por el espacio. Su única esperanza era chocar con algo que podría ayudarles. Cuando descubrieron a los seres humanos, encontraron una respuesta, no fue una cura, sino una manera de sobrevivir.

Los Unknown (Los Desconocidos)
Desde el principio, los Unknown ya vivían. Acababa de empezar una evolución larga y sinuosa, pero desde la primera fracción de segundo se sentían que estaban vivos. Su morada se expandió a la misma velocidad que el universo. Las galaxias se arremolinaron y condensaron, nacieron de las estrellas. En cada estrella, los Unknown estaban viviendo una vida silenciosa y sin pretensiones. Con curiosidad, ellos mantienen un seguimiento de la evolución del universo, pero sin intervenir. Ellos ven todo lo que pasa, y cada estrella o planeta recién nacido, ya les pertenece por herencia.

Link útil

lunes, 30 de mayo de 2016

Tutorial de uso de la librería Winnovative HTML to PDF con C# y MVC

Hola, hace rato que no publicaba nada...Bueno hoy veremos como usar la librería Winnovative HTML to PDF Converter Library usando C# y MVC .Net. El tema nació en que buscamos una forma buena y elegante de imprimir un PDF a partir de un sitio web hecho en MVC .Net, pudiendo personalizar el PDF, tipo de hoja, orientación, que permita imprimir un sitio que haga request Ajax y tenga imágenes.

Personalmente conozco 3 herramientas que permiten generar PDF desde C# y me quedo con Winnovative por lo anterior dicho:


El tutorial fue probado con IE 11, Chrome 50.0.2661.102, FireFox 37.0.1.

Requisitos


  • Tener la librería Winnovative HTML to PDF Converter Library v12.16, descargarla de http://www.winnovative-software.com/download.aspx. En mi caso bajé Winnovative HTML to PDF Converter Library Optimized for 64-bit ya que tanto los PC de los desarrolladores como servidores son de 64 bit.
  • En mi caso usaré una versión comprada HTML to PDF Converter Redistributable License cuyo valor es de 1200 USD ya que permite instalarlo en N Servidores, incluyendo en PC de desarrolladores y en servidores de clientes. No es obligación tener la licencia para el ejemplo, lo que sí, saldrán tus PDF con la frase Winnovative PDF Tools Demo en la parte inferior:
  • Para el ejemplo usaré Visual Studio 2013 con C#, MVC 4 y Framework 4.0
NOTA: la librería no es compatible con el Framework .Net 3.5, si con las versiones 2.0, 4.0 y 4.5.

Paso a paso


Pasos generales

  • Crear un proyecto MVC 4 usando C# con Framework 4.0.
  • Vamos a instalar la librería Winnovative "a la antigua", es decir manualmente, ya que se puede instalar por NuGet. Descomprimir el archivo descargado WnvHtmlToPdf-v12.16-x64.zip, en la raíz del zip estarán estos tres archivos que son compatibles si usas al Framework 4.0: wnvhtmltopdf.dll, wnvinternal.dat y Help.chm.
  • Si usas el Framework 2.0 debes copiar los 3 archivos de la carpeta NET_2.0 (wnvhtmltopdf.dll, wnvhtmltopdf.xml y wnvinternal.dat) al directorio bin de tu proyecto web. El XML contiene sólo la documentación de los fuentes.
  • Si están con Framework 4.0. debes copiarlos a una nueva carpeta LIB. Preocúpate los archivos que no estén chequeados como "solo lectura".
  • El archivo wnvhtmltopdf.dll dentro de LIB debes referenciarlo desde tu proyecto MVC .NET.
  • Agregar en el HomeController el using:

    //HomeController.cs
    using Winnovative;
  • Si usas la Key, y la agregas en el código, no se verá el mensaje "Winnovative PDF Tools Demo":

    //HomeController.cs
    htmlToPdfConverter.LicenseKey = "keyComprada";

Imprimir a pdf una vista o página externa

  • Crear el vista principal con un botón dentro de un Form que llamará a la impresión, por ejemplo:

    <!-- Index.cshtml -->
    @using (Html.BeginForm("ImprimeVistaExterna", "Home", FormMethod.Post))
    {
    <input type="submit" id="impresion2" name="impresion2" value="imprimir otra vista completa" /gt;
    }
  • Creas el Action y la Vista Externa a ser llamada. Esta vista puede tener imágenes, o un llamado Ajax a otra Vista ¡y todo eso se verá impreso!. Esa es la gracia de la librería ya que mucha no hacen eso, esta ejecuta el request con todo lo que conlleva, llamados Ajax, JS, estilos, imágenes y todo el resultado del HTML final, es el que imprime. En mi caso incluso uso la librería Kendo MVC para mostrar un TreView y esta igual se imprime:

    <!-- VistaExterna.cshtml -->
    @{
    ViewBag.Title = "Impresion ejemplo";
    }

    <h1>Vista demo de impresión</h1>

    @(Html.Kendo().TreeView()
    .Name("LinksTreeView")
    .Items(items =>
    {
    items.Add()
    .Text("Home")
    .Action("Index", "Home");
    items.Add()
    .Text("About")
    .Action("About", "Home");
    items.Add()
    .Text("Contact")
    .Action("Contact", "Home");
    })
    )

    <img src="~/Images/pacman.png" />

    <div id="contenedor"></div>

    <script>
    $(document).ready(function () {
    $.ajax({
    url: "/Home/VistaExternaAjax",
    type: 'GET',
    datatype: 'html',
    success: function (data) {
    $("#contenedor").html(data);
    }
    });
    });
    </script>
  • Por último creamos la vista externa (la más externa) que es llamada desde al Ajax anterior:

    <!-- VistaExternaAjax.cshtml -->
    <h1>Otra Vista externa invocada por ajax</h1> <h2>holaaa</h2>
  • Si abrimos la Vista externa en el navegador se verá así:
  • Creas el Action ImprimeVistaExterna dentro del controlador Home:
    //HomeController.cs
    [HttpPost]
    public ActionResult ImprimeVistaExterna()
    {
    // Create a HTML to PDF converter object with default settings
    HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter();
    
    // Set HTML Viewer width in pixels which is the equivalent in converter of the browser window width
    htmlToPdfConverter.HtmlViewerWidth = 1024;
                
    htmlToPdfConverter.LicenseKey = "tuKey"; //propiedad opcional
    htmlToPdfConverter.HtmlViewerHeight = 768;
    
    // Set PDF page size which can be a predefined size like A4 or a custom size in points 
    // Leave it not set to have a default A4 PDF page
    htmlToPdfConverter.PdfDocumentOptions.PdfPageSize = PdfPageSize.Letter;
    
    // Set PDF page orientation to Portrait or Landscape
    // Leave it not set to have a default Portrait orientation for PDF page
    htmlToPdfConverter.PdfDocumentOptions.PdfPageOrientation = PdfPageOrientation.Portrait;
    
    // Set the maximum time in seconds to wait for HTML page to be loaded 
    // Leave it not set for a default 60 seconds maximum wait time
    htmlToPdfConverter.NavigationTimeout = 4;
    
    // Set an adddional delay in seconds to wait for JavaScript or AJAX calls after page load completed
    // Set this property to 0 if you don't need to wait for such asynchcronous operations to finish
    htmlToPdfConverter.ConversionDelay = 1;
    
    string url = "http://localhost:50422/Home/VistaExterna";
    
    // Convert the HTML page given by an URL to a PDF document in a memory buffer
    byte[] outPdfBuffer = htmlToPdfConverter.ConvertUrl(url);
    
    // Send the PDF file to browser
    FileResult fileResult = new FileContentResult(outPdfBuffer, "application/pdf");
    fileResult.FileDownloadName = "ImpresionVistaExterna.pdf";
    
    return fileResult;
    }
    
  • Notar que en url defines la ruta que se imprimirá. Se le hará un request a dicha ruta. Puede ser cualquier URL, incluso una externa como www.google.com
  • Con htmlToPdfConverter.NavigationTimeout se define el tiempo máximo de espera a dicho request. Yo usaré 4 segundos.
  • Con fileResult.FileDownloadName le defines el nombre del archivo PDF de salida.
  • Con htmlToPdfConverter.PdfDocumentOptions.PdfPageSize = PdfPageSize.Letter defines el tipo de papel, en este caso tipo Carta.
  • Con htmlToPdfConverter.PdfDocumentOptions.PdfPageOrientation = PdfPageOrientation.Portrait defines la orientación del documento.
  • Al hacer clic en "Imprimir página Externa", se bajará el PDF resultante y su lo abres es el mismo contenido HTML que tiene la vista externa:


Imprimir a pdf una sección de la página actual

  • La sección debe ser una Vista Parcial, así que creas la vista Seccion.cshtml:

    <!-- Seccion.cshtml -->
    @{
    ViewBag.Title = "Seccion ejemplo";
    var nombre = ViewBag.Nombre;
    }

    <div class="panel">
    <div class="panel-body">

    @using (Html.BeginForm("ImpresionSeccionVistaActual", "Home", FormMethod.Post))
    {
    <h3>Sección: @nombre</h3>
    <br />
    <img src="~/Images/pacman.png" />
    }

    <center>
    <div class="rotate">Este texto está rotado 90 grados</div>
    </center> </div> </div>
  • El ejemplo contiene un texto rotado en 90 grados que se verá impreso de igual forma, por lo tanto debes agregar en la sección de estilos el siguiente código:

    <!-- _Layout.cshtml -->
    <style>
    .rotate {
    font-family: Arial, Helvetica, sans-serif;
    font-size: 13px;
    -webkit-transform: rotate(-90deg);
    -moz-transform: rotate(-90deg);
    -o-transform: rotate(-90deg);
    -ms-transform: rotate(-90deg);
    -sand-transform: rotate(90deg);
    }
    </style>
  • Creamos en la vista principal un botón Imprimir que llame al Action que haremos luego. Notar que agregamos dos bloques de texto antes y después para que se vea que solo se imprimirá la vista Seccion.cshtml:

    <!-- Index.cshtml -->
    <h2>Texto anterior</h2>
    @{
    Html.RenderAction("Seccion", "Home", new { nombre = nombre });
    }

    @using (Html.BeginForm("ImpresionSeccionVistaActual", "Home", FormMethod.Post))
    {
    @Html.Hidden("nombre", (object)nombre)
    <input type="submit" id="impresion2" name="impresion2" value="imprimir sólo sección" />
    }
    <h2>Texto posterior</h2>
  • En el HomeController crear el Action ImpresionSeccionVistaActual que procesa la sección:
    //HomeController.cs
    [HttpPost]
    public ActionResult ImpresionSeccionVistaActual(FormCollection collection)
    {
    object model = null;
    ViewDataDictionary viewData = new ViewDataDictionary(model);
    
    // transmit the posted data to view
    viewData.Add("nombre", collection["nombre"]);
    
    // The string writer where to render the HTML code of the view
    StringWriter stringWriter = new StringWriter();
    
    // Render the Index view in a HTML string
    ViewEngineResult viewResult = ViewEngines.Engines.FindView(ControllerContext, "Seccion", null);
    ViewContext viewContext = new ViewContext(
    ControllerContext,
    viewResult.View,
    viewData,
    new TempDataDictionary(),
    stringWriter
    );
    viewResult.View.Render(viewContext, stringWriter);
    
    // Get the view HTML string
    string htmlToConvert = stringWriter.ToString();
    
    // Get the base URL
    String currentPageUrl = this.ControllerContext.HttpContext.Request.Url.AbsoluteUri;
    String baseUrl = currentPageUrl.Substring(0, currentPageUrl.Length - "Home/Seccion".Length);
    
    // Create a HTML to PDF converter object with default settings
    HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter();
    
    // Set license key received after purchase to use the converter in licensed mode
    // Leave it not set to use the converter in demo mode
    htmlToPdfConverter.LicenseKey = key;
    
    // Set an adddional delay in seconds to wait for JavaScript or AJAX calls after page load completed
    // Set this property to 0 if you don't need to wait for such asynchcronous operations to finish
    htmlToPdfConverter.ConversionDelay = 2;
    
    // Convert the HTML string to a PDF document in a memory buffer
    byte[] outPdfBuffer = htmlToPdfConverter.ConvertHtml(htmlToConvert, baseUrl);
    
    // Send the PDF file to browser
    FileResult fileResult = new FileContentResult(outPdfBuffer, "application/pdf");
    fileResult.FileDownloadName = "ImpresionSeccionVistaActual.pdf";
    
    return fileResult;
    }
    
  • Si haces clic en "Imprimir solo sección", se verá el PDF:
  • La imagen de la aplicación final ejecutándose en el navegador con dos botones, Imprimir Sección o Imprimir página externa, se ve así:

Mostrar PDF en una nueva pestaña del navegador al hacer clic en imprimir (y no en la barra de descargas)


Cambiar la clase Controller:
//HomeController.cs
// Convert the HTML page given by an URL to a PDF document in a memory buffer
byte[] outPdfBuffer = htmlToPdfConverter.ConvertUrl(url);            

// Send the PDF file to browser
//FileResult fileResult = new FileContentResult(outPdfBuffer, "application/pdf");            
//fileResult.FileDownloadName = "ImpresionVistaExterna.pdf";
//return fileResult;

MemoryStream stream = new MemoryStream(outPdfBuffer);
Response.AppendHeader("content-disposition", "inline; filename=file.pdf");
return new FileStreamResult(stream, "application/pdf");
Cambiar la vista para que abra en una nueva pestaña con target _black:

<!-- Index.cshtml -->
@using (Html.BeginForm("ImprimeVistaExterna", "Home", FormMethod.Post, new { target= "_blank" }))
{
<input type="submit" id="impresion2" name="impresion2" value="ver pdf generado directo en otra pestaña" />
}



Mostrar PDF en una nueva pestaña del navegador al hacer clic en imprimir y se abra automáticamente el cuadro de diálogos de las impresoras


Esto es útil si el usuario quiere hacer la menor cantidad posible de clic para imprimir un documento PDF. Se le debe asignar el key (si tienes) de nuevo al Document. Recordar igual lo del target _blank en la vista que tiene el botón.
//HomeController.cs
string url = "http://localhost:50422/Home/VistaExterna";

// Convert the HTML page given by an URL to a PDF document in a memory buffer
byte[] outPdfBuffer = htmlToPdfConverter.ConvertUrl(url);                       

//mergeResultPdfDocument.OpenAction.Action = New PdfActionJavaScript("print()")

// Send the PDF file to browser
//FileResult fileResult = new FileContentResult(outPdfBuffer, "application/pdf");            
//fileResult.FileDownloadName = "ImpresionVistaExterna.pdf";
//return fileResult;

MemoryStream stream = new MemoryStream(outPdfBuffer);

Document document = new Document(stream);
document.LicenseKey = key;
document.OpenAction.Action = new PdfActionJavaScript("print()");
byte[] b = document.Save();
Stream strm = new MemoryStream(b);
           
Response.AppendHeader("content-disposition", "inline; filename=file.pdf");
return new FileStreamResult(strm, "application/pdf");


Links útiles